C# 是否将列映射到实体属性?

C# 是否将列映射到实体属性?,c#,sql-server,dapper,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.Datab

我正在使用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;
}
公共类产品
{
公共int Id{get;set}
公共字符串名称{get;set}
public int CategoryId{get;set}
]
公共IEnumerable GetProducts(int类别ID)
{
var connection=DataContext.Database.connection;
var sql=“从产品中选择*,其中category_id=@categoryId”;
var result=connection.Query(sql,新的{categoryId});
返回结果;
}
查询本身返回请求的记录,但列表中的每个对象都有空字段

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


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

您的产品类必须定义为与查询返回的结果相匹配。因此,您可以做的是-

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;
}
public IEnumerable GetProducts(int categoryId)
{
var connection=DataContext.Database.connection;
var sql=“从产品中选择*,其中category_id=@categoryId”;
var result=connection.Query(sql,new{categoryId})。选择(p=>newproduct{
Id=(int)p.ProductId,
名称=(字符串)p.ProductName,
CategoryId=(int)p.ProductCategoryId
});
返回结果;
}

您可以使用该软件包,通过继承ClassMapper或AutoMapper为您的类创建自定义映射器。有关详细信息,请参阅。没有时间给出完整答案。我相信您还需要从使用查询方法更改为使用Get方法。这是一个很好的答案,因为对于一次性查询和映射,此解决方案将我就足够了。但是,对于许多需要映射的查询,DapperExtensions是一种选择。对于许多查询或某些复杂对象,您需要使用DapperExtensions。无论如何,很高兴能帮助您,如果您能对我的答案进行投票,我将表示感谢:)