読者です 読者をやめる 読者になる 読者になる

dapper dot net - splitOn パラメータのカンマ区切り

dapper

去年のこの時期に試していた 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 あれな人