Simple intérieur jointure résultat avec Dapper?

Je n'arrive pas à trouver de documentation ou d'exemples pour mon problème (j'ai cherché depuis longtemps). Je pense que mon problème est assez simple, donc voilà.

j'ai deux tables. Ma table principale s'appelle Persons et la table secondaire PersonEntries. Pour chaque personne dans le tableau de la personne, je peux avoir 0 entrées ou plus dans le tableau de la personne. Pareil.

Table: Person
Id
Name

Table: PersonEntry
PersonId
CheckinTime
CheckoutTime

j'ai deux objets comme ceci

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

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

si je devais l'obtenir à partir de la base de données dans mes classes c # comment je le ferais? Je peux mapper une seule table dans ma Classe c# et le faire pour chaque table, mais alors je suis laissé pour correspondre quelles entrées correspond à quelle personne.

j'ai vu plusieurs exemples de mappage D'une PersonEntry à une personne, le problème ici est que j'ai une relation zéro-à-plusieurs. Ma Personne ont un LIST D'Articles personnels.

26
demandé sur Per Hornshøj-Schierbeck 2013-12-10 14:33:58

1 réponses

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;
29
répondu Jeroen K 2017-05-02 08:45:56