ThenInclude不適用於Entity Framework LINQ查詢

c# entity-framework-core linq

我有這樣的數據庫模型:

public class Customer
{
    public int CustomerId{ get; set; }

    public int OrderId { get; set; }
    public ICollection<Order> Orders { get; set; }
}

public class Order
{
    public int OrderId { get; set; }
    public int Amount { get; set; }

    public int ProductId { get; set; }
    public Product Product { get; set; }
}

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }
}

所以我們有一個可以訂購的客戶。此訂單包括產品,其中包括名稱。我現在正嘗試使用如下所示的linq語句返回完整模型:

_db.Customer.Include(c => c.Orders).ThenInclude(o => o.Product).SingleOrDefaultAsync();

ThenInclude(o => o.Product)不起作用,因為Orders是ICollection。來自德國的問候,並提前感謝您的幫助。

一般承認的答案

EF Core的EF Core等效語法

.Include(x => x.Tests.SelectMany(z => z.PupilsTests))

.Include(x => x.Tests).ThenInclude(x => x.PupilsTests)

請注意, ThenInclude似乎存在VS Intellisense問題,因此只需鍵入上面的內容即可成功編譯並運行。

另請注意,EF Core進程集合包含不同(不使用EF6中的單個查詢),因此上面將生成並執行3個SQL查詢。

更新:現在,在包含多個級別部分的EF Core文檔中特別提到了VS Intellisense問題:

注意!

當前版本的Visual Studio提供了錯誤的代碼完成選項,並且在收集導航屬性之後使用ThenInclude方法時,可能會導致正確的表達式被標記為語法錯誤。這是在https://github.com/dotnet/roslyn/issues/8237上跟踪的IntelliSense錯誤的症狀。只要代碼正確並且可以成功編譯,就可以安全地忽略這些偽造的語法錯誤。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow