0

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

4

1 回答 1

3

如果可能,最好不要在 NHibernate 中使用 Identity 列;它们导致 NHibernate 对数据库进行更多的访问,使批处理变得不可能,并从根本上打破了工作单元模式。这在nhibernate.info和一些类似的博客文章中进行了讨论。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;
    }
}

真是太棒了!然后就是弄清楚如何让 SchemaExport 从 0 开始作为种子。它可能已经这样做了(通过使用未保存的值 +1 作为种子)?检查它是否有效。如果没有,那么您可能需要查看修补它或覆盖 hbm.xml。一种方法是使用 XSLT 转换生成的 HBM 文件。再一次,非常讨厌。

于 2009-03-30T16:24:42.680 回答