Tipos de retorno dinamico

.net c# dapper orm

Pregunta

He estado usando Dapper.net por un tiempo y es un muy buen mapeador de ORM que funciona muy bien con los tipos dinámicos .Net.

Pero me di cuenta de que cuando Dapper recupera datos de la base de datos, vuelve a aparecer como tipo de fila Dapper.

¿Hay alguna manera de que pueda devolverlo en cualquier otro tipo, como System.Dynamic.ExpandoObject ?

Respuesta aceptada

El objeto DapperRow está diseñado para compartir mucho estado entre filas. Por ejemplo, si busca 40 filas, los nombres de las columnas, etc. solo se almacenan una vez . Si usamos ExpandoObject , esto necesitaría configurarse por fila. Por lo tanto, el uso de DapperRow como detalle de implementación entre bastidores es una cuestión de eficacia deliberada.

Tenga en cuenta que el objeto devuelto por las API dynamic también se puede convertir como IDictionary<string,object> .

Sin embargo, estaría abierto a admitir otros tipos que admitan este uso del diccionario, de los cuales ExpandoObject es uno. Entonces sí, podría cambiarse de tal manera que:

var rows = conn.Query<ExpandoObject>(...);

trabajos. Simplemente requiere código para admitirlo , y ese código no existe actualmente. Entonces "no, pero quizás en una compilación futura".

Tenga en cuenta también que no necesita usar DapperRow en absoluto ... El escenario más esperado es utilizar la API genérica para materializar sus propios tipos.


Respuesta popular

¡Por supuesto!

Según la documentación apresurada, use el método de consulta y obtenga su dymanics:

dynamic account = conn.Query<dynamic>(@"
                    SELECT Name, Address, Country
                    FROM Account
            WHERE Id = @Id", new { Id = Id }).FirstOrDefault();
Console.WriteLine(account.Name);
Console.WriteLine(account.Address);
Console.WriteLine(account.Country);

Como puede ver, obtiene un objeto dinámico y puede acceder a sus propiedades siempre que estén bien definidas en la declaración de consulta.

Si omites .FirstOrDefault() , obtienes un IEnumerable<dynamic> que puedes hacer lo que quieras con él.



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é