ven*_*kat 19 c# entity-framework-6
我们有一个场景可以在单个事务中从两个上下文中保存两个实体.
第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);
}
}
Run Code Online (Sandbox Code Playgroud)
执行第3步时,currentContext.UseTransaction(dbTransaction); line抛出异常为" 传入的事务与当前连接无关.只能使用与当前连接关联的事务 "
请建议如何解决.
Venkat.
Maa*_*ten 32
使用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();
}
Run Code Online (Sandbox Code Playgroud)