Dapper multimapping y left join

dapper

Pregunta

Dada esta prueba:

    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);
    }

La documentación de Dapper dice que la asignación múltiple de mapas asigna filas a varios objetos y no menciona nada acerca de los objetos que se colapsan realmente (como ocurriría para las uniones izquierda / interna donde se repiten los valores de la columna más a la izquierda).

¿Hay alguna manera nativa de Dapper para que esto suceda?

Respuesta experta

No existe actualmente un mecanismo incorporado para hacer esto aplanamiento, pero hay un ejemplo en el conjunto de pruebas aquí . No es enormemente bastante, y esto es algo que me gustaría hacer un mejor soporte para, pero nunca ha llegado a la parte superior de la lista de cosas que hacer.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué