Jeg har arbejdet lidt på en enhedsrammeudbyder og har kigget på det. Jeg mener, at udbyderen ikke selv har noget valg i situationen. Kommandotræet oprettes af entitetsrammen og giver det til udbyderen at bygge SQL. Dette er et komplet gæt her, men måske er grunden til, at det genererer LEFT OUTER join i den situation, fordi entitetsrammen ikke rigtig ved, at den referencemæssige begrænsning eksisterer i databasen. For eksempel kan jeg gå ind og rode med entity-modellen efter den er oprettet fra databasen og tilføje/ændre begrænsninger, som ikke har nogen refleksion over, hvad databasen laver. Måske af denne grund valgte designerne at spille det sikkert og producere den VENstre ydre sammenføjning "for en sikkerheds skyld".
Ikke desto mindre tror jeg på, at du kan få et indre sammenhold. Følgende fik f.eks. udbyderen til at bygge en LEFT OUTER join:
var res2 = from a in ent.answers
select new
{ a.Answer1, a.user.UserName };
Følgende resulterer dog i en INNER join:
res2 = from a in ent.answers
join u in ent.users
on a.UserID equals u.PK
select new { a.Answer1, u.UserName };
Den følgende entitet SQL producerede også en indre joinforbindelse:
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" );