代码之家  ›  专栏  ›  技术社区  ›  Rob

castle activerecord seeding主键值

  •  2
  • Rob  · 技术社区  · 15 年前

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

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

    1 回复  |  直到 15 年前
        1
  •  3
  •   zihotki    15 年前

    城堡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。向数据库添加一些插入触发器
    在我看来,你应该使用第一种方法,因为这样你就不会依赖数据库了。当需要向上或向下移动对象时,您可以重用此功能。我通常用这种方法。