sql >> Database >  >> RDS >> Mysql

Linq to Entities en LEFT OUTER JOIN probleem met VEEL:1 relaties

Ik heb een beetje gewerkt aan een entiteit framework provider en heb daar naar gekeken. Ik denk dat de provider zelf geen keus heeft in de situatie. De opdrachtstructuur wordt gemaakt door het entiteitsframework en geeft deze aan de provider om de SQL te bouwen. Dit is hier een volledige gok, maar misschien is de reden dat het de LEFT OUTER join in die situatie genereert, omdat het entiteitsraamwerk niet echt weet dat de referentiële beperking in de database bestaat. Ik kan bijvoorbeeld ingaan op het entiteitsmodel nadat het is gemaakt vanuit de database en beperkingen toevoegen/wijzigen die geen weerspiegeling zijn van wat de database doet. Misschien om deze reden hebben de ontwerpers ervoor gekozen om op veilig te spelen en de LEFT OUTER-join te produceren "voor het geval dat".

Toch geloof ik dat je een inner join kunt krijgen. Het volgende zorgde er bijvoorbeeld voor dat de provider een LEFT OUTER-join bouwde:

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

Het volgende resulteert echter in een 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 };

Ook produceerde de volgende entiteit SQL een inner join:

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. Snelle MySQL-tip:het DROP USER-commando gebruiken

  2. vervang afvaltekens in mysql

  3. MariaDB CONNECTION_ID() uitgelegd

  4. Bereken de som van de tijdkolom in PostgreSql