我需要在两种模型下实现事务(使用两个独立的有界上下文)。所以代码如下:
using (TransactionScope scope = new TransactionScope())
{
//Operation 1
using(var context1 = new Context1())
{
context1.Add(someCollection1);
context1.SaveChanges();
}
//Operation 2
using(var context2 = new Context2())
{
context2.Add(someCollection2);
context2.SaveChanges();
}
scope.Complete();
}
返回异常:
已检测到环境事务。 Entity Framework Core 确实
不支持环境事务。看http://go.microsoft.com/fwlink/?LinkId=800142 http://go.microsoft.com/fwlink/?LinkId=800142
在 Link 中,他们建议对两个上下文使用一个连接。并在使用 context1 的块时使用 context2。
但如果我为每个模型使用自己的控制器/服务:
using (TransactionScope scope = new TransactionScope())
{
service1.DoWork();
service2.DoWork();
scope.Complete();
}
我应该如何实施这个?在方法中添加连接作为参数 - 似乎很荒谬。带连接的初始化服务也是个坏主意。
使用下面的代码片段
using (var context = new MyContext())
{
using (var transaction = context.Database.BeginTransaction())
{
try
{
var customer = context.Customers
.Where(c => c.CustomerId == 2)
.FirstOrDefault();
customer.Address = "43 rue St. Laurent";
context.SaveChanges();
var newCustomer = new Customer
{
FirstName = "Elizabeth",
LastName = "Lincoln",
Address = "23 Tsawassen Blvd."
};
context.Customers.Add(newCustomer);
context.SaveChanges();
transaction.Commit();
}
catch (Exception)
{
transaction.Rollback();
}
}
}
更多细节:https://entityframeworkcore.com/ saving-data-transaction https://entityframeworkcore.com/saving-data-transaction
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)