2017-11-11 101 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確信您使用主鍵進行查找時,才能首先檢查其身份映射。 –

相關問題