我正在开发 Blazor 应用程序,其中使用 Dapper 查询 MySQL 数据库。我有一个
TransactionsModel
类,对应于我的数据库中的一个表,其结构如下:
# Table Structure
'transaction_id', 'int', 'NO', 'PRI', NULL, 'auto_increment'
'municipality_name', 'varchar(255)', 'YES', '', NULL, ''
'barangay_name', 'varchar(255)', 'YES', '', NULL, ''
我正在尝试从此表中检索数据并将其显示在 Blazor 页面上,但我遇到了查询结果未正确填充
transactions
列表的问题。即使我的交易表有这样的数据:
transaction_id municipality_name barangay_name
1 Municipality 1 Barangay 1
2 Municipality 2 Barangay 2
3 Matanao Laswerte
4 Matanao Laswerte
执行代码后,
transactions
列表包含空值,如下:
TransactionsModel,TransactionsModel.TransactionId,TransactionsModel.MunicipalityName,TransactionsModel.BarangayName
dsa_marketing.Models.TransactionsModel,0,"",""
dsa_marketing.Models.TransactionsModel,0,"",""
dsa_marketing.Models.TransactionsModel,0,"",""
dsa_marketing.Models.TransactionsModel,0,"",""
我已经仔细检查了数据库连接,似乎没问题。这是我正在使用的代码:
// Blazor Page Razor Markup
@page "/"
@using Dapper;
@using MySql.Data.MySqlClient;
@using dsa_marketing.Models
@using dsa_marketing.Controller
<!-- Rest of the Razor Markup -->
@code {
private List<TransactionsModel> transactions = new List<TransactionsModel>();
protected override async Task OnInitializedAsync()
{
try
{
string connectionString = "Server=127.0.0.1;Port=3306;Database=dsa_cluster;Uid=test;Pwd=test123";
MySqlConnection connection = new MySqlConnection(connectionString);
string selectQuery = "SELECT * FROM transactions";
transactions = connection.Query<TransactionsModel>(selectQuery).ToList();
}
catch (Exception ex)
{
// Handle any exceptions here (e.g., log them or display an error message)
Console.WriteLine($"Error: {ex.Message}");
}
}
}
这是我的交易模型
using System.ComponentModel.DataAnnotations;
namespace dsa_marketing.Models
{
public class TransactionsModel
{
[Key]
public int TransactionId { get; set; }
public string MunicipalityName { get; set; }
public string BarangayName { get; set; }
}
}
我不确定为什么查询结果没有正确填充
transactions
列表。任何有关如何排查和解决此问题的见解或建议将不胜感激。
谢谢!
您的问题出在模型中的列名称或属性名称(选择其中之一)。
简而言之,如果值的名称与模型属性匹配,Dapper 只能将模型属性与传入值相关联。
如果您无法/不愿意更改一组以匹配另一组,您可以简单地在 SELECT 语句中使用别名:
select
transaction_id as TransactionId,
municipality_name as MunicipalityName,
barangay_name as BarangayName
from
transactions
;
注意:我不太了解 MySQL 语法。我想我在某处遗漏了引号。不过,您可能已经明白了。