簡體   English   中英

EF5 Code First:IsLoaded和.AsNoTracking()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM