Pracowałem trochę nad dostawcą frameworku encji i przyjrzałem się temu. Uważam, że sam dostawca nie ma w tej sytuacji wyboru. Drzewo poleceń jest tworzone przez strukturę encji i przekazuje je dostawcy w celu skompilowania SQL. To jest kompletne przypuszczenie, ale być może powodem, dla którego generuje on w tej sytuacji sprzężenie LEFT OUTER, jest to, że struktura encji tak naprawdę nie wie, że ograniczenie referencyjne istnieje w bazie danych. Na przykład mogę wejść i zepsuć model jednostki po jego utworzeniu z bazy danych i dodać/zmienić ograniczenia, które nie mają odzwierciedlenia w działaniu bazy danych. Być może z tego powodu projektanci postanowili zachować ostrożność i wyprodukować LEWE ZEWNĘTRZNE złącze „na wszelki wypadek”.
Niemniej jednak wierzę, że możesz uzyskać wewnętrzne połączenie. Na przykład poniższe spowodowało, że dostawca utworzył złącze LEFT OUTER:
var res2 = from a in ent.answers
select new
{ a.Answer1, a.user.UserName };
Jednak następujące wyniki w połączeniu INNER:
res2 = from a in ent.answers
join u in ent.users
on a.UserID equals u.PK
select new { a.Answer1, u.UserName };
Ponadto następująca encja SQL wytworzyła sprzężenie wewnętrzne:
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" );