有沒有什麼辦法讓這個實體從的DbContext查詢返回返回null(或其他一些特定的值),當您嘗試訪問導航屬性,你沒有具體.Include()?例如:
var parents = dbContext.People.Where(p => p.Children.Any()).Include("Children").ToList();
//Assert all parents have children...
Assert.IsTrue(parents[0].Children.Any());
而且......
var parents = dbContext.People.Where(p => p.Children.Any()).ToList();
//Assert all children collections are null... NOT LAZY LOADED
Assert.IsTrue(parents[0].Children == null);
要清楚,我不希望屬性急於裝入。我不希望它被加載。我試過從上下文中分離實體,但這沒有幫助。
背景
我想這樣做的原因是因爲我需要訪問一個不同勢線程比的DbContext創建對一個實體對象。正因爲如此,我不希望將導航屬性設置爲一些有針對性的excution linq語句。問題是,因爲我無法訪問DbContext來檢查導航屬性是否加載(由於它不是線程安全的),我無法知道是否需要在當前線程上創建新的DbContext來檢索丟失數據。這是我試圖用How to tell if a Navigation Property is loaded without DbContext
更新
中的DbContext的Configuration.LazyLoadingEnabled屬性設置爲false,以解決同樣的問題阻止了LINQ從得到自動有線了,但導航性能是集合這會導致一個空集合而不是null。
爲了解決基於集合的問題,我修改了我的T4模板來生成一個空的默認構造函數,而不是將每個ICollection設置爲一個空的HashSet。
嘗試.AsNoTracking的
Configuration.LazyLoadingEnabled
屬性禁用延遲加載()。 – DevilSuichiroAsNoTracking()阻止上下文緩存實體,但訪問導航屬性仍會導致嘗試查詢其創建的上下文。 – NuclearProgrammer