Dapper와의 간단한 내부 조인 결과?

dapper

문제

나는 내 문제에 대한 문서 나 예제를 찾지 못하고있다. 나는 내 문제가 매우 간단하다고 생각한다.

나는 두 개의 테이블을 가지고있다. 내 기본 테이블은 Persons이고 보조 테이블은 PersonEntries입니다. Person 테이블의 각 사람마다 PersonEntries 테이블에 0 개 이상의 항목이있을 수 있습니다. 이렇게

Table: Person
Id
Name

Table: PersonEntry
PersonId
CheckinTime
CheckoutTime

나는이 두 가지 물건을 가지고있다.

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

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

데이터베이스에서 C # 클래스로 가져온다면 어떻게 할 수 있습니까? 하나의 테이블을 C # 클래스로 매핑하여 각 테이블에 대해 수행 할 수 있지만, 엔트리가 어떤 사람과 매핑되는지를 일치시킬 수 있습니다.

하나의 PersonEntry를 하나의 Person으로 매핑하는 몇 가지 예를 보았습니다. 문제는 여기에 제로 - 대 - 다 관계가 있다는 것입니다. 내 사람은 PersonEntry 항목 목록 을 가지고 있습니다.

수락 된 답변

다음과 같이 할 수 있습니다 ( 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;


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow