Dapper .NET: personalizar la asignación

.net c# dapper

Pregunta

Modelo

public class ErrorReport{
    public int? Id {get;set;}
    public ExceptionReport Exception {get;set;}
    public ExceptionReport InnerException {get;set;}
}

public class ExceptionReport{
    public string Type {get; set;}
    public string Message {get; set;}
}

Base de datos

Esta es la tabla de la que quiero consultar

ErrorReports

  • Yo dint
  • ExceptionType: varchar
  • ExceptionMessage: varchar
  • InnerExceptionType: varchar
  • InnerExceptionMessage: varchar

El problema

Entonces, lo que quiero hacer es consultar la base de datos y asignar los resultados a las propiedades de mi modelo. Pero esto no funciona:

using (var con = ConnectionFactory.CreateConnection(_connectionString))
{
     IEnumerable<ErrorReport> reports = con.Query<ErrorReport>("Select * from ErrorReports");
}

Entiendo que tengo que decir explícitamente qué columnas se asignan a qué propiedad, entonces, ¿cómo puedo hacer eso?

Respuesta popular

Puede devolver su consulta como dynamic y luego asignar cada propiedad a su objeto complejo correspondiente.

using (var con = ConnectionFactory.CreateConnection(_connectionString))
{
    List<ErrorReport> reports = 
        con.Query<dynamic>("Select * from ErrorReports")
            .Select(x => new ErrorReport 
            { 
                Id = x.Id, 
                Exception = new ExceptionReport
                {
                    Type = x.ExceptionType,
                    Messsage = x.ExceptionMessage
                },
                InnerException = new ExceptionReport
                {
                    Type = x.InnerExceptionType,
                    Messsage = x.InnerExceptionMessage
                }
            }).ToList();
}


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é