【问题标题】:Letting the database pick the primary key in nhibernate让数据库在 nhibernate 中选择主键
【发布时间】:2009-03-17 04:23:02
【问题描述】:

我如何只允许 MySQL 使用 nhibernate 将主键分配给插入的对象?似乎我想将生成器设置为“身份”类型,但文档指出使用此“..require[s] 两个 SQL 查询来插入新对象”。为什么会这样做?有没有办法让这个功能像正常的插入 sql 语句一样运行?

【问题讨论】:

    标签: c# .net nhibernate


    【解决方案1】:

    它需要两个查询的原因是,对于标识,在插入行之前不会定义列的值。因此,它需要在插入后进行选择以获取插入对象的列值。这是非常标准的,我不会让它阻止我使用自动生成的键作为我的主键。另一种选择是预先生成密钥——比如新对象的 GUID,然后再将其持久化到数据库中。在大多数情况下,除非有其他缓解情况,例如必须合并来自不同数据库的数据,否则自动生成的键可能会发生冲突。

    【讨论】:

      【解决方案2】:

      有一个明显的优势:让 NHibernate 使用 Guids 或 Hilo 作为 id 生成器将在 NHibernate 中启用一个非常酷的功能:批处理。只需将 NHibernate 配置为使用批处理(例如 1000 条语句),您的插入就会突然变得非常快。

      Fabio 有一篇关于各种可用生成器 here 的帖子 - 如果您正在使用 NHibernate(或者如果您知道有人认为 NHibernate 性能不佳),这将非常有用。

      【讨论】:

        猜你喜欢
        • 2015-05-21
        • 1970-01-01
        • 1970-01-01
        • 2011-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多