如何在 NHibernate 中自动生成 ID

2024-05-09

如何让 NHibernate 自动生成表的唯一 ID? ID 可以是任意的long值,只要每个值仅使用一次。

我当前的映射如下所示:

<id name="Id">
    <generator class="increment"/>
</id>

这会创建从 1 开始递增的 ID,但它会在每次应用程序启动时重置为 1。因此,每次重新启动后,存储的第一个元素都会获取 Id 1,而前一个 Id 1 元素将被删除(不是我想要的)。

编辑:这样做的原因是我使用了SchemaExport代替SchemaUpdate,所以我的整个数据库在每次应用程序启动时都被删除。

谢谢你!


有关于它的明确文档部分。我建议使用 HI-LO(参见Hi/Lo 算法是什么? https://stackoverflow.com/q/282099/1679310)

5.1.5.1.发电机 http://nhibernate.info/doc/nh/en/index.html#mapping-declaration-id-generator

增量

生成任何整数类型的标识符,仅当没有其他进程将数据插入同一表时,该标识符才是唯一的。不要在集群中使用。

identity

支持 DB2、MySQL、MS SQL Server 和 Sybase 中的标识列。使用 Convert.ChangeType 将数据库返回的标识符转换为属性类型。因此支持任何完整的属性类型。

sequence

使用 DB2、PostgreSQL、Oracle 中的序列或 Firebird 中的生成器。使用 Convert.ChangeType 将数据库返回的标识符转换为属性类型。因此支持任何完整的属性类型。

hilo

使用 hi/lo 算法有效地生成任何整数类型的标识符,给定表和列(默认情况下分别为 hibernate_unique_key 和 next_hi)作为 hi 值的来源。 hi/lo 算法生成仅对于特定数据库唯一的标识符。请勿将此发生器与用户提供的连接一起使用。

您可以使用“where”参数来指定要在表中使用的行。如果您想使用单个表作为标识符,并且每个表具有不同的行,这非常有用。

seqhilo

在给定命名数据库序列的情况下,使用 hi/lo 算法有效地生成任何整数类型的标识符。

uuid.hex

使用 System.Guid 及其 ToString(string format) 方法生成字符串类型的标识符。返回的字符串长度取决于配置的格式。

uuid.字符串

使用新的 System.Guid 创建转换为字符串的 byte[]。 指导

使用新的 System.Guid 作为标识符。

guid.comb

使用 Jimmy Nilsson 在文章中描述的算法生成新的 System.Guidhttp://www.informit.com/articles/article.asp?p=25862 http://www.informit.com/articles/article.asp?p=25862.

native

根据底层数据库的功能选择身份、序列或 hilo。

assigned

让应用程序在调用 Save() 之前为对象分配一个标识符。

foreign

使用另一个关联对象的标识符。通常与<one-to-one>主键关联。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 NHibernate 中自动生成 ID 的相关文章

  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐