Dapper将列映射到实体属性?

时间:2014-10-30 08:53:08

标签: c# sql-server dapper

我正在使用Dapper的查询<>搜索一些记录:

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

查询本身返回请求的记录,但列表中的每个对象都有空字段。

那么如何将列映射到实体的属性?

我不想在sql语句中添加列别名。装饰实体的属性也不是一种选择,因为实体是由EF设计者生成的。

1 个答案:

答案 0 :(得分:6)

您的Product类必须定义,以匹配从查询返回的结果。所以你能做的是 -

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;
}
相关问题