2016-09-20 84 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