2017-05-09 16 views
0

に参加左:Dapperのmultimappingと、このテストを考える

public class Author 
    { 
     public int AuthorId { get; set; } 
     public List<Book> Books { get; set; } = new List<Book>(); 
    } 
    public class Book 
    { 
     public int BookId { get; set; }    
    } 
    [Fact] 
    public async Task DapperCollapseLeftJoin() 
    { 
     var sql = @"  select 1 as AuthorId, 1 as BookId 
        union select 1 as AuthorId, 2 as BookId 
        union select 2 as AuthorId, 3 as BookId 
        union select 2 as AuthorId, 4 as BookId"; 
     var authorsWithBooks = 
      (await AC.OpenConnection.QueryAsync<Author, Book, Author>(sql, 
       (author, book) => { author.Books.Add(book); return author; }, 
       splitOn: "AuthorId, BookId")).ToList(); 

     // fails because we're getting 4 author+book rows 
     Assert.Equal(2, authorsWithBooks.Count); 
    } 

Dapperのためのドキュメントは複数のオブジェクトにマップする行をmultimapping、実際に内部/左はどこ参加するためのオブジェクト(のようなことが起こるでしょう崩壊については何も言及していないと言います一番左の列の値が繰り返されます)。

これを実現するためにDapperのネイティブ方法はありますか?

答えて

1

は、現在、この平坦化を行うための作り付けのメカニズムはありませんが、テストスイートhereの例があります。これはかなり綺麗ではありません。これはのようなものです。より良いサポートをするためにはのようになりますが、それはやりたいことのリストの一番上には達していません。

関連する問題