Dot-Net

當我發出“SaveChanges()”時,Entity Framework 中的預設事務隔離級別是什麼?

  • April 14, 2011

當我發出“SaveChanges()”時,Entity Framework 中的預設事務隔離級別是什麼?我在任何地方都找不到它。它應該是“可序列化的”嗎?

SaveChanges使用DbTransaction目前商店提供者的實現。這意味著預設事務隔離級別設置為數據庫伺服器的預設值。在 SQL Server 中是READ COMMITTED. 如果要更改隔離級別,可以使用TransactionScope. 您還可以SaveChanges在派生上下文中覆蓋並base.SaveChanges()直接在覆蓋方法中包裝到範圍。

public override void SaveChanges()
{
   // Default isolation level for TransactionScope is Serializable
   using (var scope = new TransactionScope())
   {
       base.SaveChanges();
       scope.Complete();
   }
}

您可以進一步改進此程式碼以允許您將隔離級別傳遞給SaveChangesetc。一旦您開始更改隔離級別,您應該始終如一地執行此操作。這意味著您應該在每次要執行事務時定義隔離級別,因為隔離級別是為每個連接配置的,並且在使用連接池時會重用連接。

編輯: EF6 中的預設事務級別已更改為READ COMMITTED SNAPSHOT

引用自:https://stackoverflow.com/questions/5657145