Castle ActiveRecord播种主键值

时间:2009-02-22 15:27:47

标签: activerecord primary-key castle-activerecord

我想知道如何使用Castle AR“播种”自动递增的主键值?例如,想要Orders表的主键以10000开头。这是可能的2.可能2.创建订单号的好方法吗?

也许有一种方法可以在不是pk的DB上连续自动递增字段,播种到10000?

1 个答案:

答案 0 :(得分:3)

Castle ActiveRecord构建于NHibernate之上,AR的功能严重依赖于NHibernate的功能。 NHibernate包含几个主键生成器:
   1. 原生 - 这是默认生成器。如果指定了这个,那么NHibernate会根据底层数据库自动选择生成器类型。例如,如果我在上面的映射片段中使用native而不是identity,你仍然会得到相同的SQL,因为NHibernate足够聪明,可以理解底层数据库SQL Server并且它支持标识列。 NHibernate使用Convert.ChangeType方法转换返回的值    2. 身份 - 这可以与SQL Server,MySQL,Sybase等提供的Identity列一起使用    3. 序列 - Firebird,DB2,PostgreSQL,Oracle,SAP DB支持序列
   4. 增量 - 此生成器不使用任何数据库功能,如序列或标识。 NHibernate自动将1增加到最后一个主键值。在处理单个数据库系统时,此生成器很有用,但在基于集群的环境中没有帮助    5. hilo - 使用Hi / Lo算法生成主键值。与其他发电机类型相比,这非常有效。使用时,NHibernate创建一个名为hibernate_unique_key的单独表,并创建一个名为next_hi的列,然后当INSERT发生时,NHibernate使用此表作为引用。我们将在本文后面详细讨论这个问题    6. uuid.hex - 使用System.Guid及其ToString方法生成基于字符串的主键值。
   7. guid - 当类属性类型为Guid时,可以使用此方法    8. guid.comb - 这与guid类似,但使用不同的算法来生成主键值。请注意,uuid.hex,guid,guid.comb在SQL Server中使用UNIQUEIDENTIFIER作为列数据类型。
   9. 已分配 - 最后但并非最不重要的是,此生成器假定主键值是由用户分配的。

所以你可以看到没有这样的内置功能。要创建订单号,您可以使用两种方式:
1.选择最大订单并手动设置 2.在数据库中添加一些插入触发器 在我看来,你应该使用第一种方式,因为这样你就不会依赖数据库了。当您需要向上或向下移动对象时,您可以重用此功能。我通常都是这样用的。