城堡ActiveRecord是建立在NHibernate的基础上,而AR的功能在很大程度上依赖于NHibernate的功能。NHibernate包含几个主要的密钥生成器:
1。
本地的
-这是默认生成器。如果指定此选项,则nhibernate将根据基础数据库自动选择生成器类型。例如,如果我在上面的映射片段中使用本机而不是标识,您仍然可以得到相同的SQL,因为nhibernate足够聪明,可以理解底层数据库SQL Server及其支持标识列。nHibernate使用convert.changeType方法转换返回的值。
2。
身份
-这可以与随SQL Server、MySQL、Sybase等提供的标识列一起使用。
三。
序列
-Firebird、DB2、PostgreSQL、Oracle、SAP DB支持序列
4。
增量
-此生成器不使用任何数据库功能,如序列或标识。nHibernate自动增加1到最后一个主键值。此生成器在处理单个数据库系统时很有用,但在基于集群的环境中却没有帮助。
5。
希洛
-hi/lo算法用于生成主键值。与其他类型的发电机相比,这是非常有效的。使用时,nhibernate创建一个名为hibernate_unique_key的单独表,并创建一个名为next_hi的列,然后nhibernate在插入时使用此表作为引用。我们稍后将在这篇文章中详细讨论这个问题。
6。
六角形
-使用System.guid及其ToString方法生成基于字符串的主键值。
7。
GUID
-这可以在类属性类型为guid时使用。
8。
引导梳
-这类似于guid,但使用不同的算法生成主键值。注意,uuid.hex、guid、guid.comb在SQL Server中使用uniqueidentifier作为列数据类型。
9。
分配
-最后,这个生成器假定主键值由用户分配。
因此,您可以看到没有这样的内置功能。要创建订单号,可以使用两种方法:
1。选择最大订单并手动设置
2。向数据库添加一些插入触发器
在我看来,你应该使用第一种方法,因为这样你就不会依赖数据库了。当需要向上或向下移动对象时,您可以重用此功能。我通常用这种方法。