Profiler显示选择新约会进入数据库。为什么没有从上下文中提取约会,这仍然在内存中?
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();
答案 0 :(得分:1)
显然,只有在使用Find方法时才会使用Entity Framework第一级缓存。
context.Appointments.Find( a => a.AppointmentId == appointment.AppointmentId)
这是可以理解的,因为查询解析器不知道查询将检索哪些实体 只有当您明确地尝试基于其主键查找实体时,DbContext(实现Identity Map模式)才能首先查找是否已经存在与给定主键关联的实体。