gpt4 book ai didi

c# - 保存时的 NHibernate FlushMode

转载 作者:太空狗 更新时间:2023-10-30 00:29:24 25 4
gpt4 key购买 nike

我已经将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com