相关疑难解决方法(0)

我如何在NHibernate中进行嵌套事务?

我可以在NHibernate中进行嵌套事务,我该如何实现它们?我正在使用SQL Server 2008,所以支持肯定在DBMS中.

我发现如果我尝试这样的事情:

using (var outerTX = UnitOfWork.Current.BeginTransaction())
{
    using (var nestedTX = UnitOfWork.Current.BeginTransaction())
    {
        ... do stuff
        nestedTX.Commit();
    }

    outerTX.Commit();
}
Run Code Online (Sandbox Code Playgroud)

然后到outerTX.Commit()事务处理变为非活动状态时,会在会话AdoTransaction上产生ObjectDisposedException.

因此我们应该创建嵌套的NHibernate会话吗?或者是否有其他类我们应该使用它来包装事务(我听说过TransactionScope,但我不确定那是什么)?

我现在正在使用Ayende的UnitOfWork实现(感谢Sneal).

原谅这个问题的任何天真,我还是NHibernate的新手.

谢谢!

编辑:我发现你可以使用TransactionScope,例如:

using (var transactionScope = new TransactionScope())
{
    using (var tx = UnitOfWork.Current.BeginTransaction())
    {
        ... do stuff
        tx.Commit();
    }

    using (var tx = UnitOfWork.Current.BeginTransaction())
    {
        ... do stuff
        tx.Commit();
    }

    transactionScope.Commit();
}
Run Code Online (Sandbox Code Playgroud)

但是我对此并不是很兴奋,因为它锁定了我们使用SQL Server,而且我发现如果数据库是远程的,那么你必须担心启用MSDTC ...还有一个组件要去错误.嵌套事务在SQL中是如此有用和容易,我认为NHibernate可以通过某种方式模拟相同的...

sql-server nhibernate session transactions nested

18
推荐指数
2
解决办法
1万
查看次数

刷新NHibernate同时仍然允许事务回滚

我试图将NHibernate与未与NHibernate映射的遗留实体一起使用.有时这意味着我需要手动将NHibernate数据刷新到数据库,这样当我尝试将遗留实体与NHibernate映射实体连接时,我不会收到外键异常.

当这发生在需要回滚的事务中时会发生问题.从NHibernate刷新的数据不会回滚.

我能做些什么吗?

UPDATE

仍然很好奇如何做到这一点 - 我不相信给出的任何答案都解决了这个问题.我需要调用Flush().问题是,如何回滚已刷新的数据?

nhibernate transactions flush

5
推荐指数
1
解决办法
5017
查看次数

标签 统计

nhibernate ×2

transactions ×2

flush ×1

nested ×1

session ×1

sql-server ×1