dapper dot net - splitOn パラメータのカンマ区切り
去年のこの時期に試していた splitOn パラメータの続きです。
以前の記事はこちら。
dapper dot net で1レコードを"Id"列以外で分割してマッピングする(splitOn パラメータ) - いちろぐ
今回は 1レコードを複数のオブジェクトにマッピングする際に、複数のカラム名で分割するにはどうするの?ってあたりを試してみました。結論を先に言うと splitOn パラメータに複数のカラム名をカンマ区切りの文字列として渡します。
ということで試してましょう。
まずはモデル。(前回のモデルに Author を追加しました。)
class Author { public int Id { get; set; } public string Name { get; set; } } class Book { public string Isbn { get; set; } public string Title { get; set; } public Author Author { get; set; } } class Order { public int Id { get; set; } public DateTime Date { get; set; } public Book Book { get; set; } }
マッピングします。splitOn パラメータにIsbn,Id
を指定します。
var orders = connection.Query<Order, Book, Author, Order>(@" select 1 as Id, '2014/02/05' as Date, N'0001234567890' as Isbn, N'あれな本' as Title, 2 as Id, N'あれな人' as Name;", (order, book, author) => { book.Author = author; order.Book = book; return order; }, // bookはIsbnからでauthorはIdから splitOn: "Isbn,Id"); foreach (var order in orders) { Console.WriteLine("{0} {1:d} {2} {3} {4} {5}", order.Id, order.Date, order.Book.Isbn, order.Book.Title, order.Book.Author.Id, order.Book.Author.Name); }
ちゃんと分割されてマッピングされていますね。
1 2014/02/05 0001234567890 あれな本 2 あれな人