我首先使用 EF5 代码,我需要SaveChanges()
在同一个事务中包装多个调用。我对使用 transactionScope 比较陌生,似乎无法调整它的选项来完成我想要做的事情。
以下代码位于一个服务类中,该服务类被注入了我的 DbContext 类的实例。我不会在此类中的任何位置创建额外的 DbContext 实例。
起初我尝试了以下方法。代码很好很干净,但它会在函数中的SaveChanges
方法期间尝试升级到 DTC 。GenerateInvoice
using (var scope = new TransactionScope())
{
// This function does some work and calls SaveChanges
Guid invoiceId = GenerateInvoice(cart);
// This function also does some querying and calls SaveChanges
DeleteCart();
// Transaction should only commit if both functions above were successful
scope.Complete();
}
我做了一些研究并将代码更改为以下不会升级为 DTC 的代码,但我不确定这是否是最好的方法。
IObjectContextAdapter adapter = (IObjectContextAdapter)_context;
adapter.ObjectContext.Connection.Open();
using (var scope = new TransactionScope())
{
// This function does some work and calls SaveChanges
Guid invoiceId = GenerateInvoice(cart);
// This function also does some querying and calls SaveChanges
DeleteCart();
// Transaction should only commit if both functions above were successful
scope.Complete();
adapter.ObjectContext.Connection.Close();
}
SaveChanges
有没有一种更简单的方法可以在不升级到 DTC的情况下首先通过多个 EF5 代码获得事务支持?
谢谢