我想知道如何使用 Castle AR“播种”一个自动递增的主键值?例如,希望 Orders 表的主键以 10000 开头。这是 1. 可能 2. 创建订单号的好解决方案吗?
也许有一种方法可以在不是 pk 的数据库上连续自动递增字段,播种为 10000?
我想知道如何使用 Castle AR“播种”一个自动递增的主键值?例如,希望 Orders 表的主键以 10000 开头。这是 1. 可能 2. 创建订单号的好解决方案吗?
也许有一种方法可以在不是 pk 的数据库上连续自动递增字段,播种为 10000?
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. 向数据库添加一些插入触发器
我认为您应该使用第一种方式,因为这样您将不依赖数据库。当您需要向上或向下移动对象时,您可以重用此功能。我一般都是用这种方式。