Я немного поработал над провайдером фреймворка сущностей и посмотрел на это.Я считаю, что сам провайдер не имеет выбора в данной ситуации.Дерево команд создается структурой сущностей и предоставляет его поставщику для построения SQL.Здесь это полное предположение, но, возможно, причина, по которой оно генерирует LEFT OUTER соединение в этой ситуации, заключается в том, что структура сущностей не знает, что в базе данных существует референтное ограничение.Например, я могу пойти и разобраться с моделью сущностей после ее создания из базы данных и добавить / изменить ограничения, которые не отражают то, что делает база данных.Возможно, по этой причине дизайнеры решили не рисковать и создать соединение 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" );