如何使NHibernate自动生成表的唯一ID?ID可以是任何long
值,只要每个ID仅使用一次即可。
我当前的映射如下所示:
<id name="Id">
<generator class="increment"/>
</id>
这会创建从1开始的递增ID,但在每次应用程序启动时都会重置为1。因此,每次重新启动后,存储的第一个元素将获得Id 1,而先前的Id 1元素将被删除(不是我想要的)。
编辑:原因是我使用SchemaExport
而不是SchemaUpdate
,所以在每次应用程序启动时删除了我的整个数据库。
谢谢!
有明确的文档部分。我建议使用HI-LO(请参阅什么是Hi / Lo算法?)
增量
仅当没有其他进程将数据插入同一表时,才会生成唯一的唯一整数类型的标识符。不要在集群中使用。
身份
支持DB2,MySQL,MS SQL Server和Sybase中的标识列。使用Convert.ChangeType将数据库返回的标识符转换为属性类型。因此,支持任何整数属性类型。
顺序
使用DB2,PostgreSQL,Oracle中的序列或Firebird中的生成器。使用Convert.ChangeType将数据库返回的标识符转换为属性类型。因此,支持任何整数属性类型。
你好
给定一个表和一个列(分别默认为hibernate_unique_key和next_hi)作为hi值的源,使用hi / lo算法有效地生成任何整数类型的标识符。高/低算法生成仅对于特定数据库唯一的标识符。请勿将此生成器与用户提供的连接一起使用。
您可以使用“ where”参数来指定表中要使用的行。如果要使用单个表格作为标识符,而每个表具有不同的行,则此功能很有用。
seqhilo
在给定命名数据库序列的情况下,使用hi / lo算法高效地生成任何整数类型的标识符。
uuid.hex
使用System.Guid及其ToString(字符串格式)方法生成字符串类型的标识符。返回的字符串的长度取决于配置的格式。
uuid.string
使用新的System.Guid创建一个byte []并转换为字符串。吉德
使用新的System.Guid作为标识符。
guid.comb
使用算法生成Jimmy Nilsson在文章http://www.informit.com/articles/article.asp?p=25862中描述的新System.Guid 。
本国的
根据基础数据库的功能选择身份,序列或hilo。
已分配
允许应用程序在调用Save()之前为对象分配标识符。
外国的
使用另一个关联对象的标识符。通常与<one-to-one>
主键关联一起使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句