当前位置:  开发笔记 > 编程语言 > 正文

如何在NHibernate中自动生成ID

如何解决《如何在NHibernate中自动生成ID》经验,为你挑选了1个好方法。

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

我当前的映射看起来像这样:


    

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

编辑:原因是我使用SchemaExport而不是SchemaUpdate,所以我的整个数据库在每次应用程序启动时都被删除了.

谢谢!



1> Radim Köhler..:

有明确的文档部分.我建议使用HI-LO(参见什么是Hi/Lo算法?)

5.1.5.1.发电机

增量

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

身分

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

序列

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

希洛

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

您可以使用"where"参数指定要在表中使用的行.如果要为标识符使用单个表格,并为每个表使用不同的行,则此选项非常有用.

seqhilo

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

uuid.hex

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

uuid.string

使用新的System.Guid创建一个转换为字符串的byte [].GUID

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

guid.comb

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

本地人

根据底层数据库的功能选择标识,序列或hilo.

分配

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

国外

使用另一个关联对象的标识符.通常与主键关联一起使用.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有