让数据库在nhibernate中选择主键

时间:2009-03-16 20:05:55

标签: c# .net nhibernate

我如何只是简单地允许MySQL使用nhibernate为插入的对象分配主键?看来我想将生成器设置为类型“identity”,但是文档声明使用这个“..require [s]两个SQL查询来插入一个新对象。”为什么会这样做?有没有办法让这个功能像普通的插入sql语句一样?

2 个答案:

答案 0 :(得分:2)

它需要两个查询的原因是,在插入行之前,使用标识不会定义列的值。因此,它需要select after insert来获取插入对象的列值。这是非常标准的,我不会让它阻止我使用自动生成的密钥作为我的主键。另一种选择是在将新对象持久化到数据库之前预先生成密钥 - 例如新GUID的GUID。除非存在其他缓解情况,例如必须合并自动生成密钥可能发生冲突的单独数据库中的数据,否则在大多数情况下我并没有真正看到这方面的优势。

答案 1 :(得分:2)

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

Fabio有一篇关于各种可用性生成器here的帖子 - 如果您正在使用NHibernate(或者如果您认识某人认为NHibernate表现不佳),则非常有用。