Entity Frameworkコアとの外部結合

c# entity-framework-core

質問

私はEF7(7.0.0-rc1-final)、vNext RC1(rc1-final)、およびSQL Server 2014で左外部結合要求を実行しようとしています

データベース:

ペット:ID、名前

ユーザー:ID、名前、#PetId

これは動作します:

var queryWorks = from u in _context.Users
                 join p in _context.Pets on u.PetId equals p.Id into pp
                 from p in pp.DefaultIfEmpty()
                 select new {
                     UserName = u.Name,
                     Pet = p
                 };

これは動作しません(メッセージ= "シーケンスには要素がありません"):

var queryFails = from u in _context.Users
                 join p in _context.Pets on u.PetId equals p.Id into pp
                 from p in pp.DefaultIfEmpty()
                 select new {
                     UserName = u.Name,
                     PetName = (p == null ? "NULL" : p.Name)
                 };

SQL Serverプロファイル2014は、2番目の要求がSQL Serverに送信されないことを示しています。どうして ?

受け入れられた回答

私はそれが処理されない2番目のクエリの投影内にあなたのp.Nameだと思う。

RC1の時点では、EF7は左外部結合をどうやって行うのかまだ分かりません。要するに、彼らは正しいことが本当に重要なことであり、それに取り組んでいることを認識しています。

githubの3186号で報告されており、開発者の中にはコメントしています。

私はあなたのようなもう一つのレプロを自分自身にコメントしました。

コラボレーター "maumar"発言:

問題は、Linqでは(オブジェクトに対して)LOJの概念はそれ自身では存在しないということです。

提案された問題は、SelectMany-GroupJoin-DefaultIfEmptyの組み合わせを使用してオプションのナビゲーションを表現し、このパターンをリレーショナルパイプラインでLOJに縮小することです。問題は、(主にサブクエリの導入による)より複雑なクエリを作成し、現在では大多数の重要ではないケースで壊れてしまうという問題です。これらのバグは、ナビゲーションプロパティの拡張で問題を解決する前に対処する必要があります。

これは潜在的に間違った結果を返すため、これを最優先バグと認識しています。



Related

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