2017-11-11 102 views
1

事件探查器显示新约会的选择进入数据库。为什么不把这个约会从仍在记忆中的上下文中拉出来?它为什么从数据库中获取实体?

var context = DatabaseHelper.CreateDbContext(); 

    var appointment = new Appointment(); 

    context.Appointments.Add(appointment); 
    context.SaveChanges(); 

    var appointment0 = context.Appointments.Where(a => a.AppointmentId == appointment.AppointmentId).Single(); 

回答

1

显然,实体框架的第一级高速缓存将只在您使用Find方法使用。

context.Appointments.Find(a => a.AppointmentId == appointment.AppointmentId) 

这是可以理解的,因为查询解析器不知道查询将检索哪些实体。
只有在明确尝试根据主键查找实体时,如果已经存在与给定主键关联的实体,则可以先查找DbContext(实现Identity Map模式)。

+0

尽管我的代码正在做主键查找。所以这不是完全可以理解的。 –

+0

实体框架并不知道该查询的结果集是什么,所以它必须执行它。只有当EF确信您使用主键进行查找时,才能首先检查其身份映射。 –

相关问题