2009-02-22 36 views
2

我想知道如何'种子'使用城堡AR自动递增主键值?例如,想让Orders表主键从10000开始。这是否为1.可能2.创建订单号码的一个很好的解决方案?Castle ActiveRecord播种主键值

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

+1

什么是数据库引擎? – 2009-02-22 16:37:05

回答

3

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

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