gpt4 book ai didi

NHibernate 与 TransactionScope

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

任何人都可以给我一个关于使用 TransactionScope 和 NHibernate 的快速概述吗?我需要对 session /IEnlistmentNotification/等做一些特别的事情吗?让它发挥作用?有什么我应该担心的陷阱吗?例如,我可以替换所有休眠事务吗:

var transaction = session.BeginTransaction();
try
{
// code
transaction.Commit();
}
catch (Exception)
{
transaction.Rollback();
}

用这个?:

using (var scope = new TransactionScope())
{
// code
scope.Complete();
}

最佳答案

我已经使用 nHibernate 2.1 一段时间了,在遇到一些生产问题并尝试了相当多的变化之后,我们决定采用以下方法,如Avoiding Leaking Connections With NHibernate And TransactionScope :

        using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
using (var session = sessionFactory.OpenSession())
using (var transaction = session.BeginTransaction())
{
// do what you need to do with the session
transaction.Commit();
}
scope.Complete();
}

由于我们使用 MSMQ 和 WCF,因此我们必须使用环境事务。

我们发现不使用 session.BeginTransaction() 会导致连接泄漏。我们还发现,提交事务后重新使用 session 会导致竞争条件(nHibernate 不是线程安全的,并且 DTSC 提交/回滚发生在后台线程上)。

关于NHibernate 与 TransactionScope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/646318/

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