Dapper 查询结果未正确填充

问题描述 投票:0回答:1

我正在开发 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
列表。任何有关如何排查和解决此问题的见解或建议将不胜感激。

谢谢!

c# mysql blazor dapper
1个回答
0
投票

您的问题出在模型中的列名称或属性名称(选择其中之一)。

简而言之,如果值的名称与模型属性匹配,Dapper 只能将模型属性与传入值相关联。

如果您无法/不愿意更改一组以匹配另一组,您可以简单地在 SELECT 语句中使用别名:

select
    transaction_id as TransactionId,
    municipality_name as MunicipalityName,
    barangay_name as BarangayName
from
    transactions
;

注意:我不太了解 MySQL 语法。我想我在某处遗漏了引号。不过,您可能已经明白了。

© www.soinside.com 2019 - 2024. All rights reserved.