sql >> Databasteknik >  >> RDS >> Mysql

Linq to Entities och LEFT OUTER JOIN-problem med MÅNGA:1-relationer

Jag har jobbat lite med en leverantör av entitetsramverk och har tittat på det. Jag anser att leverantören själv inte har något val i situationen. Kommandoträdet skapas av entitetsramverket och ger det till leverantören att bygga SQL. Det här är en fullständig gissning här, men kanske är anledningen till att den genererar LEFT OUTER-kopplingen i den situationen för att entitetsramverket inte riktigt vet att referensrestriktionen finns i databasen. Jag kan till exempel gå in och mucka med entitetsmodellen efter att den skapats från databasen och lägga till/ändra begränsningar som inte har någon reflektion över vad databasen gör. Kanske av denna anledning valde formgivarna att spela säkert och producera den VÄNSTER YTTRE kopplingen "för säkerhets skull".

Ändå tror jag att du kan få en inre koppling. Till exempel, följande fick leverantören att bygga en LEFT OUTER-join:

var res2 = from a in ent.answers
           select new
           { a.Answer1, a.user.UserName };

Följande resulterar dock 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 };

Dessutom producerade följande entitet SQL en inre koppling:

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. Python:Hämtar PostgreSQL-frågeresultat som formaterade JSON-värden

  2. Villkorlig aggregation med Group By-klausul

  3. datanukleus + jpa + orakel. Konstigt fel med tabeller som inte existerar

  4. Hibernate 4.3.5 ignorerar konfigurationsegenskapen v$session.program