[英]How to implement ambient transaction in Entity Framework Core?
[英]Entity Framework Ambient Transactions
我已經讀到,當DbContext.SaveChanges()
運行時,所有操作都會自動在幕后為您包裝在事務中。 也就是說,如果SaveChanges()
期間內部的任何操作失敗,則所有內容都會回滾以保持一致的狀態。
但是,我多次遇到的一個術語是,這些更改可以作為環境事務的一部分運行。 這到底是什么意思呢?
我特別關心的是:我有一個多線程應用程序,其中每個操作有一個上下文。 我的DbContext對象沒有一個在不同線程之間共享。 我是否保證每個DbContext.SaveChanges()
的操作將在單獨的事務中運行?
對於您的情況,是的,可以保證每個DbContext.SaveChanges()將在單獨的事務中運行。
術語“環境”事務是指在調用堆棧中從較高位置開始的事務。 因此,這是每個線程的概念。 請參見Transaction.Current和TransactionScope 。 它是一項允許您執行以下操作的功能:
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.