c# - 保存时的 NHibernate FlushMode

标签 c# nhibernate

我已经将 NHibernate session 的 FlushMode 属性设置为 FlushMode.Never,但是当我调用 session.Save(User) 时,无论如何都会对数据库进行调用。这是应该如何工作的吗?我认为在我调用 Flush() 之前它不应该执行插入操作。

编辑: 我发现了这个问题,我将主键更改为 guid 并且它起作用了。是否有任何其他类型(即没有 guid 主键)可以工作?我宁愿有一个数字而不是一个 guid...

最佳答案

您使用的是原生生成器,对吧?

问题在于,由于是数据库生成 ID,NHibernate 需要往返才能获取它。例如,对于服务器的标识字段,必须在 SCOPE_IDENTITY() 返回有效键之前执行实际的 INSERT 语句。安全执行此操作的唯一方法是刷新 session 。

作为 guid 和 identity 的替代品,您可以尝试“增量”生成器,看看它是否符合您的需求: http://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/mapping.html#mapping-declaration-id-generator

您应该知道,如果您将应用程序集群化,或者您有一些其他进程或应用程序插入同一个表中,则此方法不可行。

PS:如需进一步阅读,请尝试 http://unhandled-exceptions.com/blog/index.php/2008/12/11/on-choosing-an-identity-type/

关于c# - 保存时的 NHibernate FlushMode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/432087/

相关文章:

nhibernate - 从父集合中删除子记录

nhibernate Iesi ISet 无法删除 ()

c# - Nhibernate ArgumentNullException 未处理 值不能为 null 参数名称 : stream

C#/WPF : Disable Text-Wrap of RichTextBox

c# - WebApi - 从 Uri 和 Body 绑定(bind)

c# - 将动态组件映射到不友好的数据表结构?

c# - nHibernate 析取不是预期的行为

c# - 多个并发操作的 UI 更新

c# - 关于 Enum 和 DataAnnotation

c# - 即使 ReadOnly 设置为 false,ASP.NET GridView 中的 CheckBoxField 列也会被禁用