簡體   English   中英

實體框架環境事務

[英]Entity Framework Ambient Transactions

我已經讀到,當DbContext.SaveChanges()運行時,所有操作都會自動在幕后為您包裝在事務中。 也就是說,如果SaveChanges()期間內部的任何操作失敗,則所有內容都會回滾以保持一致的狀態。

但是,我多次遇到的一個術語是,這些更改可以作為環境事務的一部分運行。 這到底是什么意思呢?

我特別關心的是:我有一個多線程應用程序,其中每個操作有一個上下文。 我的DbContext對象沒有一個在不同線程之間共享。 我是否保證每個DbContext.SaveChanges()的操作將在單獨的事務中運行?

對於您的情況,是的,可以保證每個DbContext.SaveChanges()將在單獨的事務中運行。

術語“環境”事務是指在調用堆棧中從較高位置開始的事務。 因此,這是每個線程的概念。 請參見Transaction.CurrentTransactionScope 它是一項允許您執行以下操作的功能:

using (TransactionScope scope123 = new TransactionScope())
    {
        using (SqlConnection connection1 = new SqlConnection(connectString1))
        {
            // Do some work
            using (SqlConnection connection2 = new SqlConnection(connectString2))
            {
                // Do some more work
            }
        }

上面的兩個連接都自動使用“環境”事務“ scope123”。 聽起來好像實體框架現在知道如何做到這一點。 但是TransactionScope不會跨線程,因此您可以。 而且,這聽起來並不像您正在顯式創建事務作用域。

基於此: http : //msdn.microsoft.com/en-us/data/dn456843.aspx

默認情況下,SaveChanges將打開一個新事務,並在完成后將其處置。 在EF 6中,添加了功能,以便您可以覆蓋此行為。 只要您不竭盡所能地重用事務,就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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