Utilice Dapper para convertir una colección de objetos en un parámetro TableValuedParameter

dapper table-valued-parameters

Pregunta

Estoy tratando de usar TVP en dapper para insertar varias filas a la vez de esta manera:

                con.Execute(@"
INSERT INTO Author (
    FirstName,
    LastName,
    ParentAuthor
)
SELECT
    FirstName,
    LastName,
    ParentAuthor
FROM @TVP
"
                    , new[]
                    {
                        new Author { FirstName = "Roger", LastName = "Smith", ParentAuthor = 1},
                        new Author { FirstName = "Stan", LastName = "Smith"},
                        new Author { FirstName = "Haley", LastName = "Smith"},
                        new Author { FirstName = "Francine", LastName = "Ling"}
                    } // .AsTableValuedParameter() => not working
                );

Pero, ¿hay una forma conveniente de convertir una colección de objetos en un parámetro TableValuedParameter?

Respuesta popular

Descubrí sobre el miembro rápido y luego simplemente se puede hacer así:

                var items = new[]
                {
                    new Author {FirstName = "Roger", LastName = "Smith", ParentAuthor = 1},
                    new Author {FirstName = "Stan", LastName = "Smith"},
                    new Author {FirstName = "Haley", LastName = "Smith"},
                    new Author {FirstName = "Francine", LastName = "Ling"}
                };

                var table = new DataTable();
                using (var reader = ObjectReader.Create(
                    items,
                    nameof(Author.FirstName),
                    nameof(Author.LastName),
                    nameof(Author.ParentAuthor)
                ))
                {
                    table.Load(reader);
                }

                con.Execute(@"
INSERT INTO Author (
    FirstName,
    LastName,
    ParentAuthor
)
SELECT
    FirstName,
    LastName,
    ParentAuthor
FROM @TVP
"
                    , new { TVP = table.AsTableValuedParameter("TVP_Author") }
                );

Si hay un dapper incorporado de funcionalidad similar, me gustaría saber.



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é