Работих малко върху доставчик на рамка на обект и го разгледах. Смятам, че самият доставчик няма избор в ситуацията. Командното дърво се създава от рамката на обекта и го предоставя на доставчика за изграждане на SQL. Това тук е пълно предположение, но може би причината да генерира LEFT OUTER съединението в тази ситуация е, че рамката на обекта наистина не знае, че референтното ограничение съществува в базата данни. Например, мога да вляза и да се занимавам с модела на обекта, след като е създаден от базата данни, и да добавя/променя ограничения, които нямат отражение върху това, което прави базата данни. Може би поради тази причина дизайнерите са избрали да играят на сигурно и да създадат ЛЯВОТО ВЪНШНО съединение „за всеки случай“.
Въпреки това вярвам, че можете да получите вътрешно присъединяване. Например следното накара доставчика да изгради LEFT OUTER съединение:
var res2 = from a in ent.answers
select new
{ a.Answer1, a.user.UserName };
Въпреки това, следното води до INNER съединение:
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" );