使用2个DBContexts开始交易

时间:2016-02-15 14:04:58

标签: c# entity-framework transactions dbcontext rollback

这个想法:我正在尝试使用2个不同的dbContext对2个数据库进行插入,目标是允许角色重新插入来自两个QB的插入,以防其中一个插入异常。

我的代码:

using (var db1 = new DbContext1())
{
    db1.Database.Connection.Open();
    using (var trans = db1.Database.Connection.BeginTransaction())
    {
        //do the insertion into db1
        db1.SaveChanges();

        using (var db2 = new DbContext2())
        {
            //do the insertions into db2
            db2.SaveChanges();
        }
        trans.Commit();
    }
}

第一次保存更改时调用:db1.SaveChanges();我得到一个无效的操作异常:sqlconnection不支持并行事务

我试图找出它究竟意味着什么,它为什么会发生以及如何解决它但却未能实现这一点。

所以我的问题是: 它究竟意味着什么?为什么我会得到这个例外? 我该如何解决? 有没有办法使用begin transaction是一种不会导致此错误的不同方式?

此外,这是使用开始交易的正确方法还是我应该做些不同的事情?

***为了澄清,我使用的是db1.Database.Connection.Open();因为否则我会收到“连接已关闭”错误。

2 个答案:

答案 0 :(得分:1)

您可以在HOSTNAME_COMMAND, e.g. HOSTNAME_COMMAND: "route -n | awk '/UG[ \t]/{print $$2}'"之外处理您的连接和交易,而不是尝试在两个DbContext之间展开您的连接和交易,而不是这样:

DbContext

答案 1 :(得分:1)

我发现我只是滥用语法,所以为了帮助任何可能偶然发现这个问题的人,这是正确的方法:

using (var db1 = new DbContext1())
{
    using (var trans = db1.Database.BeginTransaction())
    {
        try
        {
            //do the insertion into db1
            db1.SaveChanges();

            using (var db2 = new DbContext2())
            {
                //do the insertions into db2
                db2.SaveChanges();
            }
            trans.Commit();
        }
        catch (Exception e)
        {
            trans.Rollback();  
        }
    }
}