GOOGLE ADS

среда, 11 мая 2022 г.

Dapper SQL-вызов, возвращающий значения NULL и 0

Работайте с Dapper, чтобы выполнять вызовы SQL и сопоставлять их с объектами. У меня проблема с вызовом SQL Dapper, который неправильно соответствует классу С#.

Используйте ASP.NET Core API и получите контроллер и класс.

Класс контроллера

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

Класс продукта

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

При использовании вышеизложенного без сопоставления с классом я получаю правильные данные. Я не знаю, что я делаю неправильно

[
{
"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
}
]

Решение проблемы


Я не знаю, что я делаю неправильно


Потому JsonPropertyNameчто это для сериализации Json вместо Dapper ORM

поэтому нам может потребоваться изменить свойство класса, как показано ниже, или @Yong Shun, например, изменить псевдоним сценария, который соответствует вашему свойству С# (с учетом регистра)

public class Products
{
public string product_name { get; set; }
public int model_year { get; set; }
public double list_price { get; set; }
}

Я думаю, нам может понадобиться использовать наш клиент в качестве ссылки вместоColumnAttributeJsonPropertyName

Наша карта клиента должна быть реализована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; }
}

Также здесь есть ссылка на версию 2: атрибуты [столбца] и [таблицы] #722, сопровождающий dapper обсуждает атрибуты сопоставления столбцов для dapper.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...