实体框架更改跟踪(只读)查询

时间:2016-09-20 10:26:07

标签: c# entity-framework

只是想要人们对场景的看法:

更有效率:

  1. 选择关闭更改跟踪的记录,然后如果需要更新,请将对象重新附加到上下文以进行更新?
    • 或 -
  2. 选择打开更改跟踪的记录,以防记录需要更新?
  3. 或者这是微不足道的?

    我的方案是我们有一个运行状况检查例程,每隔10秒对表执行一次select,很少需要更新(只有在部署了新版本时才更新记录)。那么我们应该在关闭更改跟踪功能的情况下进行健康检查吗?

1 个答案:

答案 0 :(得分:4)

根据您的使用案例,我认为No-tracking次查询会向您的应用提供big performance boost

所以你可以使用AsNoTracking()

来做到这一点
using (var context = new HelthContext())
{
    var patients = context.Patients.AsNoTracking().ToList();
}

如果您在数据库中知道entity already existsnot 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(); } 方法,如下所示。

{{1}}

参考: Entity states and SaveChanges