私は多対多の関係 (この例では "Left" "Right" と "Joinder") と "Left" にキーを設定する別のエンティティ "Satellite" を持っています。たまたま、Sattelite の FK にも固有のインデックスがあります。私の目標は、WHERE 句のサテライトのプロパティを使用して、1 つの Joinder エンティティをその Left エンティティと Right エンティティと共にロードすることです。
私は多くのアプローチを試みましたが、Linq のボキャブラリーは弱く、探しているものの用語さえ本当に知りません。
var joinder = dbContext.Joinders
.Include(j => j.Left)
.Include(j => j.Right)
.Include(j => j.Left.Satellites)
.FirstOrDefault(s => s.Name == "Hubble");
FirstOrDefault 句には、名前を分析するための s のコンテキストがないため、これは機能しません。
var joinder = dbContext.Joinders
.Include(j => j.Left)
.Include(j => j.Right)
.Include(j => j.Left.Satellites)
.Select(j => j.Left.Satellites)
.Where(s => s.Name == "Hubble");
IQueryable<Collection<Satellite>>
Select から出てくる型が混乱しているため、これは機能しません。
var query = from j in dbContext.Joinders
join l in dbContext.Lefts on j.LeftId equals l.Id
join r in dbContext.Rights on j.RightId equals r.Id
join s in dbContext.Satellites on l.Id equals s.LeftId
where s.Name == "Hubble"
select j;
このクエリはコンパイルおよび実行されますが、完全に脱水されたオブジェクトが返されます。返された Joinder 参照には、Left プロパティと Right プロパティの両方が null があります。
var query = from j in dbContext.Joinders
join l in dbContext.Lefts on j.LeftId equals l.Id
join r in dbContext.Rights on j.RightId equals r.Id
join s in dbContext.Satellites on l.Id equals s.LeftId
where s.Name == "Hubble"
select new Joinder
{
Left = l,
Right = r,
Left.Satellites = ...?
};
自動初期化子内でこれらのプロパティ名を逆参照できないように見えるため、これは機能していないようです。
誰でもこれを行う方法を知っていますか? 本質的には、「エンティティ フレームワークの多対多のディープ ロード」を検索したいのですが、他の誰もが私のように言葉で表現するわけではないと思います。