我们有一个场景可以在单个事务中保存来自两个上下文的两个实体。
第 1 步 - SetTransaction(firstContext, true);
第 2 步 - 使用 firstContext 保存第一个实体。
第 3 步 - SetTransaction(secondContext, false);
第 4 步 - 使用 secondContext 保存第二个实体
第 5 步 - 最后提交事务。
void function SetTransaction(context, startNewTransaction)
{
var currentContext = firstContext;
if (startNewTransaction)
{
var connection = currentContext.GetConnection();
connection.Open();
this.dbTransaction = connection.BeginTransaction();
}
if (this.dbTransaction != null)
{
currentContext.UseTransaction(dbTransaction);
}
}
在执行步骤 3 时,currentContext.UseTransaction(dbTransaction);行抛出异常为“传入的事务与当前连接无关。只能使用与当前连接关联的事务”
请建议如何解决。
文卡特。
最佳答案
使用TransactionScope
。 EF 将自动加入正在运行的事务范围。
这将要求您的连接字符串相同。
using (var scope = new TransactionScope()) {
// Save entity in context A
using (var contextA = new ContextA()) {
contextA.Save(...);
contextA.SaveChanges;
}
// Save entity in context B
using (var contextB = new ContextB()) {
contextB.Save(...);
contextB.SaveChanges;
}
// Commit tx-scope
scope.Complete();
}
关于c# - Entity Framework 6 中多个上下文的单个事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25307544/