Résultat de jointure interne simple avec Dapper?

dapper

Question

Je n'arrive pas à trouver de la documentation ou des exemples pour mon problème (je cherchais depuis un moment). Je pense que mon problème est assez simple, alors voilà.

J'ai deux tables. Ma table primaire est appelée Personnes et la table secondaire est PersonEntries. Pour chaque personne dans la table Personne, je peux avoir 0 ou plusieurs entrées dans la table PersonEntries. Comme ça.

Table: Person
Id
Name

Table: PersonEntry
PersonId
CheckinTime
CheckoutTime

J'ai deux objets comme celui-ci

public class Person {
  public string Name;
  public List<PersonEntry> PersonEntries;
}

public class PersonEntry {
  public DateTime CheckinTime;
  public DateTime CheckoutTime;
}

Si je devais l'obtenir de la base de données dans mes classes c # comment le ferais-je? Je peux mapper une seule table dans ma classe c # et le faire pour chaque table, mais je dois ensuite faire correspondre les entrées à chaque personne.

J'ai vu plusieurs exemples de mappage de ONE PersonEntry à ONE Person, le problème ici est que j'ai une relation zéro à plusieurs. Ma personne a une liste d'éléments PersonEntry.

Réponse acceptée

Vous pouvez faire quelque chose comme ceci (voir https://www.tritac.com/blog/dappernet-by-example ):

public class Shop {
  public int? Id {get;set;}
  public string Name {get;set;}
  public string Url {get;set;}
  public IList<Account> Accounts {get;set;}
}

public class Account {
  public int? Id {get;set;}
  public string Name {get;set;}
  public string Address {get;set;}
  public string Country {get;set;}
  public int ShopId {get;set;}
}

var lookup = new Dictionary<int, Shop>()
conn.Query<Shop, Account, Shop>(@"
                SELECT s.*, a.*
                FROM Shop s
                INNER JOIN Account a ON s.ShopId = a.ShopId                    
                ", (s, a) => {
                     Shop shop;
                     if (!lookup.TryGetValue(s.Id, out shop)) {
                         lookup.Add(s.Id, shop = s);
                     }
                     if (shop.Accounts == null) 
                         shop.Accounts = new List<Account>();
                     shop.Accounts.Add(a);
                     return shop;
                 }
                 ).AsQueryable();
var resultList = lookup.Values;


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow