使用NHibernate SchemaExport将Identity Seed设置为0

时间:2009-03-27 19:03:43

标签: nhibernate nhibernate-mapping

我正在使用NHibernate中的SchemaExport类从我的.hbm.xml文件生成我的数据库。有没有办法将我的表上的标识种子设置为0而不是1?对于ref表,我更喜欢将所有初始状态ID设置为0,并且我不希望每次在dev中重新生成数据库时都必须重置此值。我正在使用SQL Server 2005,NHibernate 1.2.1版。

1 个答案:

答案 0 :(得分:3)

如果可能的话,最好不要将Identity列与NHibernate一起使用;它们导致NHibernate更多地访问数据库,无法进行批处理,并且基本上打破了工作单元模式。这在nhibernate.info以及与此类似的一些blog posts中进行了讨论。 Guid.comb或Hi-Lo通常是更好的选择。

如果你真的想继续使用Identity,并从0开始播种,那么这里有一些可能性(未经过测试)。

只是一个猜测,但您可能需要先设置unsaved-value="-1",如下所示:

       

这允许NHibernate知道-1的标识意味着对象未被保存(瞬态)。

您还需要确保所有实体ID的默认值也为-1(数字显然默认为0):

public class Order {
    public virtual long Id{get; private set;}
    public Order(){
      Id = -1;
    }
}

它非常ykyky!那么这就是弄清楚如何让SchemaExport从0开始播种的问题。它可能已经这样做了(通过使用unsaved-value +1作为种子)?检查它是否有效。如果没有,那么您可能需要查看修补它或覆盖hbm.xml。一种方法是使用XSLT转换生成的HBM文件。再次,漂亮的yukky。