Dapperとの簡単な内部結合の結果?

dapper

質問

私は私の問題のためのドキュメンテーションや例を見つけることができないようです(今検索しています)。私は自分の問題がかなり簡単だと思うので、ここに行く。

私は2つのテーブルを持っています。プライマリテーブルはPersons、セカンダリテーブルはPersonEntriesです。 Personテーブルの各Personに対して、私はPersonEntriesテーブルに0以上のエントリを持つことができます。このような。

Table: Person
Id
Name

Table: PersonEntry
PersonId
CheckinTime
CheckoutTime

私はこのような2つのオブジェクトを持っています

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

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

私はそれをデータベースから私のC#クラスに持っていけばどうしたらいいですか? 1つのテーブルを私のC#クラスにマップして各テーブルに対して行うことができますが、次にどのエントリにマップするかを一致させるために残しています。

1つのPersonEntryを1つの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
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ