gpt4 book ai didi

sql-server - 每个业务事务和身份 key 的 NHibernate 对话

转载 作者:行者123 更新时间:2023-12-02 17:25:23 26 4
gpt4 key购买 nike

我想在 WPF 应用程序中实现按业务事务对话模式,如 here 中所述。 。不幸的是,该应用程序有一个大型现有数据库,在所有表中使用 SQL Server 生成的身份 key 。

我知道向 NHibernate session 添加新对象会导致它被插入(如果它有身份 key )。 Fabio 的模式是在每个请求结束时提交当前事务,即使我们还没有完成整个工作单元。

如果我理解正确的话,这意味着即使我放弃工作单元,我的对象也将被插入数据库并且不会被删除。所以:

  • 此模式与身份 key 不兼容吗?
  • 是否有任何合理的解决方法?
  • 在这种情况下我可以使用更好的模式吗?

编辑#1:

Fabio 的一些其他评论是 here .

编辑#2:

进一步探索使我发现了 persist(...) 方法,该方法与 save(...) 类似,但不同之处足以令人困惑。此声明取自 hibernate FAQs很有趣:

The persist() method also guarantees that it will not execute an INSERT statement if it is called outside of transaction boundaries. This is useful in long-running conversations with an extended Session/persistence context.

如果它保证事务边界内的相同,它肯定会更有用吗?我的印象是,不使用交易无论如何都会让人皱眉。

最佳答案

一个解决方法 - 您可以推迟您的 ISession.Save 直到您准备好提交您的工作单元(也许作为工作单元类中的 transient 实例的集合)。

此外,如果您的实体被现有实体引用(并且这是有意义的),您可以级联插入 - 一致地完成,这意味着您只需要显式插入聚合根对象。这是我在这种情况下通常使用的方法。

关于sql-server - 每个业务事务和身份 key 的 NHibernate 对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1377239/

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