如何在NHibernate中自动生成ID

本文关键字:自动生成 ID NHibernate | 更新日期: 2023-09-27 18:26:27

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

我当前的映射如下:

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

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

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

谢谢!

如何在NHibernate中自动生成ID

有明确的文档部分。我建议使用HI-LO(请参阅HI/LO算法是什么?)

5.1.5.1.发电机

增量

生成任何整数类型的标识符,这些标识符只有在没有其他进程将数据插入同一表时才是唯一的。请勿在群集中使用。

身份

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

序列

在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(字符串格式)方法生成字符串类型的标识符。返回的字符串的长度取决于配置的格式。

uuid.string

使用新的System.Guid创建转换为字符串的字节[]。guid

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

guid.comb

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

本机

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

分配

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

国外

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