sql >> Databáze >  >> RDS >> Mysql

Problém Linkq to Entities a LEFT OUTER JOIN se vztahy MANY:1

Trochu jsem pracoval na poskytovateli entitního rámce a podíval jsem se na to. Domnívám se, že samotný poskytovatel v dané situaci nemá na výběr. Příkazový strom je vytvořen frameworkem entity a dává jej poskytovateli k sestavení SQL. Zde je to úplný odhad, ale možná důvod, proč v této situaci generuje spojení LEFT OUTER, je ten, že rámec entity skutečně neví, že v databázi existuje referenční omezení. Můžu například jít a makat s modelem entity poté, co je vytvořen z databáze, a přidat/změnit omezení, která nemají žádný vliv na to, co databáze dělá. Možná z tohoto důvodu se designéři rozhodli hrát na jistotu a vyrobit LEVÝ VNĚJŠÍ spoj "pro každý případ".

Přesto věřím, že můžete získat vnitřní spojení. Například následující způsobilo, že poskytovatel sestavil spojení LEFT OUTER:

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

Výsledkem však bude VNITŘNÍ spojení:

res2 = from a in ent.answers
       join u in ent.users
       on a.UserID equals u.PK
       select new { a.Answer1, u.UserName };

Také následující entita SQL vytvořila vnitřní spojení:

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. Jak spustit SQL ve skriptu shell

  2. Příkaz Delete byl v Oracle velmi pomalý

  3. Při použití poolConnection nebo CreateConnection felixge/node-mysql

  4. Zobrazit pouze podkategorie wordpressu