这个想法:我正在尝试使用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();因为否则我会收到“连接已关闭”错误。
答案 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();
}
}
}