sql >> Database teknologi >  >> RDS >> Mysql

Linq to Entities og LEFT OUTER JOIN problem med MANGE:1 relationer

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" );



  1. 2 måder at kontrollere, om dataadgang er aktiveret i SQL Server (T-SQL-eksempler)

  2. MySQL Forespørgsel om at gruppere efter datointerval?

  3. SQL Server returnerer uventet ugenummer

  4. Sådan omformuleres en sql-forespørgsel