私はエンティティフレームワークプロバイダーに少し取り組んで、それを見てきました。私は、プロバイダー自体が状況に選択の余地がないと信じています。コマンドツリーはエンティティフレームワークによって作成され、SQLを構築するためにプロバイダーに提供されます。これはここでは完全な推測ですが、その状況でLEFT OUTER結合を生成する理由は、エンティティフレームワークが参照制約がデータベースに存在することを本当に認識していないためである可能性があります。たとえば、データベースから作成されたエンティティモデルを調べて、データベースの動作に反映されていない制約を追加/変更することができます。おそらくこの理由で、デザイナーはそれを安全にプレイし、「万が一に備えて」LEFTOUTERジョインを作成することを選択しました。
それにもかかわらず、私はあなたが内側の参加を得ることができると信じています。たとえば、次の場合、プロバイダーはLEFTOUTER結合を構築しました。
var res2 = from a in ent.answers
select new
{ a.Answer1, a.user.UserName };
ただし、次の場合、内部結合が発生します。
res2 = from a in ent.answers
join u in ent.users
on a.UserID equals u.PK
select new { a.Answer1, u.UserName };
また、次のエンティティSQLは内部結合を生成しました:
ObjectQuery<DbDataRecord> dr = ent.CreateQuery<DbDataRecord>(
"SELECT a.answer1, u.username " +
"FROM answers as a inner join users as u on a.userid = u.pk" );