2016-03-15 44 views
0

從EF獲取數據將保持鎖定狀態,直到執行SaveChanges?我只想讀取數據而不改變它。不使用AsNoTracking將鎖定表?

許多用戶正在訪問同一個表並對其應用更改(數百個用戶)。

我讀了一系列關於併發,SNAPSHOT轉換等的帖子。但是我只想知道如果讀取數據,然後執行長邏輯,他們會一直鎖定,直到請求完成。

var lst = db.Emps.Where(e=> e.FirstName == "John" && e.Kids.Any(k=>k.FirstName == "Tim").ToList(); 
. 
. 
. 

添加AsNoTracking會有所作爲(關於LOCKING問題)?

var lst = db.Emps.AsNoTracking().Where(e=> e.FirstName == "John" && e.Kids.Any(k=>k.FirstName == "Tim").ToList(); 
. 
. 
. 
+0

閱讀這篇文章:http://www.hanselman.com/blog/GettingLINQToSQLAndLINQToEntitiesToUseNOLOCK.aspx – Monah

回答

0

不,AsNoTracking僅禁用自動檢測您對實體執行的更改。就這樣。您可能需要使用Transactions

public static void WithTransaction(DbContext ctx, Action fn) { 
    ctx.Database.Connection.Open(); 
    using (var transaction = ctx.Database.BeginTransaction(IsolationLevel.Serializable)) 
    { 
     fn(); 
     transaction.Commit(); 
    } 
    ctx.Database.Connection.Close(); 
}