上的情景只是想人民的意见:实体框架更改跟踪(只读)查询
难道是更有效的:
- 选择具有改变跟踪记录关闭,然后如果需要要更新重新连接对象的上下文更新?
- 或 -
- 选择具有改变跟踪记录打开,以防万一记录需要更新?
或者这是微不足道的?
我的方案是我们有一个健康检查例程,每10秒对表进行一次选择并且很少需要更新(只有在部署了新版本时才更新记录)。那么我们是否应该在打开变更追踪的情况下进行健康检查?
上的情景只是想人民的意见:实体框架更改跟踪(只读)查询
难道是更有效的:
或者这是微不足道的?
我的方案是我们有一个健康检查例程,每10秒对表进行一次选择并且很少需要更新(只有在部署了新版本时才更新记录)。那么我们是否应该在打开变更追踪的情况下进行健康检查?
根据您的使用情况,我认为No-tracking
查询会给您的应用程序big performance boost
。
所以,你可以做,使用AsNoTracking()
using (var context = new HelthContext())
{
var patients = context.Patients.AsNoTracking().ToList();
}
如果你有一个entity
您在数据库知道already exists
但它是not currently being tracked
由context
,那么你可以告诉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();
}
同样的方法,但我在attach,'context.Entry(existingPatient).State = EntityState.Modified;'之后添加此行,我认为这是必需的,以告知上下文该数据用于更新而不是插入,对吧? – Monah
这个用例是不同的。也就是说,如果你有一个'entity',你知道已经存在于数据库中,但是可能已经做出了哪些修改,那么你可以告诉'context来附加'entity和set其状态为修改“。即“将现有但已修改的实体附加到上下文”。 @HadiHassan – Sampath
我已添加好**参考** above.you也可以看到:) @HadiHassan – Sampath
可能,这可能帮助:https://msdn.microsoft.com/en-us/data/hh949853.aspx#5我使用 – tschmit007