【问题标题】:Set Identity Seed to 0 Using NHibernate SchemaExport使用 NHibernate SchemaExport 将标识种子设置为 0
【发布时间】:2009-03-27 19:03:43
【问题描述】:

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

【问题讨论】:

    标签: nhibernate nhibernate-mapping


    【解决方案1】:

    如果可能,最好不要在 NHibernate 中使用 Identity 列;它们导致 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;
        }
    }
    

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

    【讨论】:

    • 你说得对,这是一个丑陋的过程。我认为重构是有序的。感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 2016-10-18
    • 2010-11-04
    • 1970-01-01
    • 2011-08-31
    相关资源
    最近更新 更多