例如,作為第一步,我的 API 控制器操作邏輯可能通過其 Id 檢索用戶物件。然后經過一些處理,在同一個 http 請求中,我再次需要具有相同 Id 的 User 實體。不知何故,用戶物件無法全部通過。所以在這一點上,當我dbContext.Users.Find(1)再次呼叫類似的東西時,我怎么能確定 DbContext 不必再次查詢資料庫,而是使用這個 User 物件的本地跟蹤版本?
uj5u.com熱心網友回復:
所以在這一點上,當我
dbContext.Users.Find(1)再次呼叫類似的東西時,我怎么能確定DbContext不必再次查詢資料庫而是使用這個User物件的本地跟蹤版本?
您知道這是因為Find方法的定義保證了這一點(這使它不同于FirstOrDefault,SingleOrDefault并且類似):
查找具有給定主鍵值的物體。如果背景關系正在跟蹤具有給定主鍵值的物體,則它會立即回傳而不向資料庫發出請求。否則,對具有給定主鍵值的物體進行資料庫查詢,如果找到該物體,則將其附加到背景關系并回傳。如果未找到物體,則回傳 null。
因此,只要您使用一個相同的 db 背景關系實體(這是 ASP.Net Core 請求的情況,并且 db 背景關系注冊了范圍生命周期),那么該Find方法將使用被跟蹤的物件(如果存在)并且不會使資料庫呼叫。
uj5u.com熱心網友回復:
如果要檢查本地背景關系中是否存在物體:
bool exist = context.Set<User>().Local.Any(e => e.Id == id);
物體的Id屬性(鍵)在哪里User,id是必需的 ID。
注意:Find可以回傳已添加到背景關系中但尚未保存到資料庫中的物體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/360883.html
