![](/img/trans.png)
[英]Rollback transaction with 2 DbContexts in Entity Framework. Use TransactionScope or TransactionBegin?
[英]Entity Framework TransactionScope rollback issue
我正在使用帶有TransactionScope的實體框架。 似乎我遇到了一個問題,即一旦調用TransactionScope的Complete()方法時出現死鎖問題,我的所有更改都不會回滾。 注意,在此TransactionScope中,我正在更新兩個單獨的數據庫,因此問題可能在於,它只會回滾遇到死鎖問題的數據庫的更改嗎?
代碼示例:
try
{
using (TransactionScope scope = new TransactionScope())
{
//Insert into database1 (getting the deadlock issue)
database1.SaveChanges();
//Update ExternalId (Identity PK from database1) in database2
database2.SaveChanges();
scope.Complete();
}
}
catch (Exception ex)
{
throw;
}
在上面的示例中,database2更新了ExternalId列,但從未將記錄插入到database1中,這很奇怪,因為ExternalId是將記錄插入到database1中時獲得的身份記錄。
如果您的連接是在TransactionScope外部創建(並打開?)的,則需要通過調用Connection.EnlistTransaction(Transaction.Current);
將其手動加入到Connection.EnlistTransaction(Transaction.Current);
。 例如
try
{
using (TransactionScope scope = new TransactionScope())
{
database1.Connection.EnlistTransaction(Transaction.Current);
database2.Connection.EnlistTransaction(Transaction.Current);
//Insert into database1 (getting the deadlock issue)
database1.SaveChanges();
//Update ExternalId (Identity PK from database1) in database2
database2.SaveChanges();
scope.Complete();
}
}
catch (Exception ex)
{
throw;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.