簡體   English   中英

實體框架TransactionScope回滾問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM