2016-09-20 80 views
2

上的情景只是想人民的意見:實體框架更改跟蹤(只讀)查詢

難道是更有效的:

  1. 選擇具有改變跟蹤記錄關閉,然後如果需要要更新重新連接對象的上下文更新?
    • 或 -
  2. 選擇具有改變跟蹤記錄打開,以防萬一記錄需要更新?

或者這是微不足道的?

我的方案是我們有一個健康檢查例程,每10秒對錶進行一次選擇並且很少需要更新(只有在部署了新版本時才更新記錄)。那麼我們是否應該在打開變更追蹤的情況下進行健康檢查?

+0

可能,這可能幫助:https://msdn.microsoft.com/en-us/data/hh949853.aspx#5我使用 – tschmit007

回答

3

根據您的使用情況,我認爲No-tracking查詢會給您的應用程序big performance boost

所以,你可以做,使用AsNoTracking()

using (var context = new HelthContext()) 
{ 
    var patients = context.Patients.AsNoTracking().ToList(); 
} 

如果你有一個entity您在數據庫知道already exists但它是not currently being trackedcontext,那麼你可以告訴context使用Attach跟蹤實體方法DbSet如下所示。

var existingPatient = new Patient { Id = 1, Name = "Patient 1" }; 

using (var context = new HelthContext()) 
{ 
    context.Patients.Attach(existingPatient); 

    // Do some more work... 

    context.SaveChanges(); 
} 

參考:Entity states and SaveChanges

+0

同樣的方法,但我在attach,'context.Entry(existingPatient).State = EntityState.Modified;'之後添加此行,我認爲這是必需的,以告知上下文該數據用於更新而不是插入,對吧? – Monah

+1

這個用例是不同的。也就是說,如果你有一個'entity',你知道已經存在於數據庫中,但是可能已經做出了哪些修改,那麼你可以告訴'context來附加'entity和set其狀態爲修改「。即「將現有但已修改的實體附加到上下文」。 @HadiHassan – Sampath

+0

我已添加好**參考** above.you也可以看到:) @HadiHassan – Sampath