2

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

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

4

1 回答 1

3

Castle ActiveRecord 建立在 NHibernate 之上,AR 的功能在很大程度上依赖于 NHibernate 的功能。NHibernate 包含几个主键生成器:
1. native - 这是默认的生成器。如果你指定了这个,NHibernate 会根据底层数据库自动选择生成器类型。例如,如果我在上面的映射片段中使用本机而不是身份,您仍然会得到相同的 SQL,因为 NHibernate 足够聪明,可以理解底层数据库 SQL Server 并且它支持身份列。NHibernate 使用 Convert.ChangeType 方法转换返回的值。
2.身份- 这可以与 SQL Server、MySQL、Sybase 等提供的身份列一起使用,
3。序列- Firebird、DB2、PostgreSQL、Oracle、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. 向数据库添加一些插入触发器
我认为您应该使用第一种方式,因为这样您将不依赖数据库。当您需要向上或向下移动对象时,您可以重用此功能。我一般都是用这种方式。

于 2009-02-22T19:02:19.700 回答