Dapper des colonnes de mappage aux propriétés d'entité?

c# dapper sql-server

Question

J'utilise la requête de Dapper <> pour rechercher un certain nombre d'enregistrements:

public class Product
{
    public int Id {get; set}
    public string Name {get; set}
    public int CategoryId {get; set}
]

public IEnumerable<Product> GetProducts(int categoryId)
{
    var connection = DataContext.Database.Connection;

    var sql = "SELECT * FROM products WHERE category_id = @categoryId";

    var result = connection.Query<Product>(sql, new { categoryId });

    return result;
}

La requête elle-même renvoie les enregistrements demandés, mais chaque objet de la liste contient des champs vides.

Alors, comment puis-je mapper les colonnes aux propriétés de l'entité?

Je ne voudrais pas ajouter des alias de colonnes dans l'instruction sql. La décoration des propriétés de l'entité n'est pas non plus une option car les entités sont générées par le concepteur EF.

Réponse acceptée

Votre classe de produit doit être définie de manière à correspondre au résultat issu de la requête. Donc, ce que vous pouvez faire, c'est -

public IEnumerable<Product> GetProducts(int categoryId)
{
    var connection = DataContext.Database.Connection;

    var sql = "SELECT * FROM products WHERE category_id = @categoryId";

    var result = connection.Query<Product>(sql, new { categoryId }).Select(p => new Product {
           Id = (int)p.ProductId,
           Name = (string)p.ProductName,
           CategoryId  = (int)p.ProductCategoryId
        });

    return result;
}


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