Then 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();

注文がICollectionであるため、 ThenInclude(o => o.Product)は機能しません。ドイツからのご挨拶と事前のお手伝い。

受け入れられた回答

EF6のEFコア相当構文

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

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

ThenInclude内部にVS Intellisenseの問題があるように見えるので、上記を入力するだけで、正常にコンパイルされ、動作します。

また、EF Coreプロセスのコレクションには異なる方法(EF6のように単一のクエリを使用しない)が含まれているので、上記の例では3つのSQLクエリが生成されて実行されます。

アップデート: VS Intellisenseの問題は、EF Coreのドキュメント「 複数のレベルを含む」セクションで具体的に言及されています

注意!

Visual Studioの現在のバージョンでは、コード補完のオプションが正しくないため、コレクションのナビゲーションプロパティの後にThenIncludeメソッドを使用すると、正しい式に構文エラーが表示される可能性があります。これはhttps://github.com/dotnet/roslyn/issues/8237で追跡されたIntelliSenseバグの症状です。コードが正しく、正常にコンパイルできる限り、これらの偽の構文エラーは無視しても安全です。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ