Dapper .NET: personnalisation du mappage

.net c# dapper

Question

Modèle

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 données

C'est la table que je veux interroger de

ErrorReports

  • Id: int
  • Type d'exception: varchar
  • Message d'exception: varchar
  • InnerExceptionType: varchar
  • InnerExceptionMessage: varchar

Le problème

Donc, ce que je veux faire, c'est interroger la base de données et mapper les résultats dans les propriétés de mon modèle. Mais cela ne fonctionne pas:

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

Je comprends que je dois dire explicitement quelles colonnes correspondent à quelle propriété, alors comment puis-je le faire?

Réponse populaire

Vous pouvez renvoyer votre requête en tant que dynamic , puis mapper chaque propriété à l'objet complexe correspondant.

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi