Dapper SQL 调用返回 NULL 和 0 值

Dapper SQL Call Returning NULL and 0 values

与 Dapper 合作进行 SQL 调用并将它们映射到对象。 我遇到 SQL Dapper 调用未正确映射到 C# Class.

的问题

使用 ASP.NET 核心 API 并且有一个控制器和一个 class。

控制器Class

 public class DapperController : Controller
{

    private const string connectionString = @"";


    [HttpGet("")]
    public async Task<IActionResult> Index()
    {

        var sql = @"SELECT product_name, model_year,list_price
                FROM [production].[products]";

        using (SqlConnection connection = new SqlConnection(connectionString)) {
                connection.Open();

                var product = await connection.QueryAsync<Products>(sql);


                return Ok(product);

    }
    }
}

产品Class

public class Products
    {
        [JsonPropertyName("product_name")]
        public string ProductName { get; set; }

        [JsonPropertyName("model_year")]
        public int ModelYear { get; set; }

        [JsonPropertyName("list_price")]
        public double ListPrice { get; set; }

    }

正在取回以下数据,但这是不正确的,因为数据库确实有数据

[
  {
    "product_name": null,
    "model_year": 0,
    "list_price": 0
  },
  {
    "product_name": null,
    "model_year": 0,
    "list_price": 0
  }
]

在不映射到 class 的情况下使用上述内容时,我得到了正确的数据。不确定我做错了什么

[
  {
    "product_name": "Trek 820 - 2016",
    "model_year": 2016,
    "list_price": 379.99
  },
  {
    "product_name": "Ritchey Timberwolf Frameset - 2016",
    "model_year": 2016,
    "list_price": 749.99
  }
]

Not sure what I am doing wrong

因为 JsonPropertyName 用于 Json 序列化而不是 Dapper ORM

这样我们可能需要修改 class 属性 如下代码或 @Yong Shun as say 修改与您的c#对齐的脚本别名属性(区分大小写)

public class Products
{
    public string product_name { get; set; }

    public int model_year { get; set; }

    public double list_price { get; set; }
}

我认为我们可能需要使用我们的客户作为这个 link ColumnAttribute 而不是 JsonPropertyName

我们的客户地图需要实现SqlMapper.ITypeMap

public class Products
{
    [Column("product_name")]
    public string ProductName { get; set; }

    [Column("model_year")]
    public int ModelYear { get; set; }

    [Column("list_price")]
    public double ListPrice { get; set; }

}

这里还有一个link V2: [Column] and [Table] Attributes #722dapper官方讨论的dapper的Column mapping attributes