[英]EF5 Code First: IsLoaded and .AsNoTracking()
我有一個EF5 Code First項目,它來自一個大多數只讀數據庫,所以我使用.AsNoTracking()
與絕大多數查詢來提高性能。
不過我很好奇:我有很多導航屬性,有時知道它們是否已經被加載,或者在源查詢上跟隨.Include()
,或者由於屬性是access(如果配置為延遲加載)。
通常我可以這樣做:
context.Entry(myEntity).Reference(e => e.MyNavigationProperty).IsLoaded;
但是,自然而言,這對於未經訓練的實體無效,因為它們是未被跟蹤的。 我有一種感覺,答案是“不”,但是有沒有辦法確定導航屬性是否已加載到未跟蹤的實體上(不需要像動態代理上的反射那樣混亂)?
謝謝!
通過訪問未跟蹤的實體,下面的解決方案不適用於從db加載的實體。 雖然后續引用該導航屬性不會創建數據庫命中,但實體框架不會跟蹤導航屬性。 我要離開這個作為不怎么做的例子;)
如何使用Local? 所以說你有
public class MyEntity
{
public int MyEntityId { get; set;}
public int MyNavigationPropertyID { get; set;}
public MNP MyNavigationProperty { get; set; }
}
public class MNP
{
public int MNPID { get; set;}
}
你可以這樣做:
context.MyNavigationProperties.Local.Where(e => e.MNPID == MyNavigationProperty);
當前正在跟蹤且未標記為已刪除的本地存儲實體。 我沒有測試過,但它應該工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.