Saya telah bekerja sedikit pada penyedia kerangka kerja entitas dan telah melihatnya. Saya percaya bahwa penyedia itu sendiri tidak punya pilihan dalam situasi ini. Pohon perintah dibuat oleh kerangka kerja entitas dan memberikannya kepada penyedia untuk membangun SQL. Ini adalah tebakan lengkap di sini, tetapi mungkin alasan menghasilkan gabungan LEFT OUTER dalam situasi itu adalah karena kerangka kerja entitas tidak benar-benar tahu bahwa batasan referensial ada dalam database. Misalnya, saya bisa masuk dan mengotori model entitas setelah dibuat dari database dan menambah/mengubah batasan yang tidak mencerminkan apa yang dilakukan database. Mungkin karena alasan ini, para desainer memilih untuk bermain aman dan menghasilkan LEFT OUTER join "berjaga-jaga".
Meskipun demikian, saya yakin Anda bisa mendapatkan inner join. Misalnya, hal berikut menyebabkan penyedia membuat gabungan LEFT OUTER:
var res2 = from a in ent.answers
select new
{ a.Answer1, a.user.UserName };
Namun, hasil berikut dalam INNER bergabung:
res2 = from a in ent.answers
join u in ent.users
on a.UserID equals u.PK
select new { a.Answer1, u.UserName };
Juga, entitas SQL berikut menghasilkan gabungan dalam:
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" );