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