dapper dot netで1レコードを複数のオブジェクトにマッピングする
dapper dot netを使って、2つのテーブルをjoinして取得した1レコードを2つのオブジェクトにマッピングしてみます。
まずはこんなモデルを用意します。
class Category { public int Id { get; set; } public string Name { get; set; } } class Book { public int Id { get; set; } public string Title { get; set; } public Category Category { get; set; } }
データも準備して、問い合わせをしてみましょう。
Query
メソッドの第2引数にマッピング用のデリゲートを渡します。
// データ準備 connection.Execute(@" create table #Category(Id int, Name nvarchar(50)); create table #Book(Id int, Title nvarchar(50), CategoryId int); insert into #Category(Id, Name) values(1, 'プログラミング'), (2, 'データベース'); insert into #Book(Id, Title, CategoryId) values(1, 'C#の本', 1), (2, 'JavaScriptの本', 1), (3, 'SQLの本', 2);"); // クエリ実行とマッピング var books = connection.Query<Book, Category, Book>(@" select * from #Book inner join #Category on #Book.CategoryId = #Category.Id;", // マッピング用デリゲート (book, category) => { book.Category = category; return book; }); foreach(var book in books) { Console.WriteLine("{0} {1} {2}", book.Id, book.Title, book.Category.Name); }
実行結果はこうなります。
1 C#の本 プログラミング 2 JavaScriptの本 プログラミング 3 SQLの本 データベース