實體框架核心渴望加載然後包含在集合中

c# entity-framework entity-framework-core

我在執行查詢時要包含三個模型。

這是場景。

public class Sale
{
     public int Id { get; set; }
     public List<SaleNote> SaleNotes { get; set; }
}

public class SaleNote
{
    public int Id { get; set; }
    public User User { get; set; }
}

public class User 
{
    public int Id { get; set; }
}

我可以像這樣急切加載SaleNotes ......

_dbContext.Sale.Include(s => s.SaleNotes);

但是,嘗試使用ThenInclude從SaleNote急切加載User模型是一項挑戰,因為它是一個集合。我找不到任何關於如何加載這種情況的例子。有人可以提供下面的代碼ThenInclude來加載集合中每個項目的用戶。

_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(...);

一般承認的答案

SaleNotes是集合導航屬性並不重要。對於引用和集合,它應該是相同的:

_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(sn=>sn.User);

但據我所知,EF7還支持使用Select擴展方法的舊的多級Include語法:

_dbContext.Sale.Include(s => s.SaleNotes.Select(sn=>sn.User));

熱門答案

作為參考,最新版本的EF Core(1.1.0)還支持此方案的顯式加載。這樣的東西......

using (var _dbContext = new DbContext())
{
    var sale = _dbcontext.Sale
        .Single(s => s.Id == 1);

    _dbcontext.Entry(sale)
        .Collection(n => n.SalesNotes)
        .Load();

    _dbcontext.Entry(sale)
        .Reference(u => u.User)
        .Load();
}


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因