C#-MySql-将数据从MySqlDataReader转换为不同模型的最佳方法

有使用实现MySql代码的现有代码库处理和修复错误的经验,但是在我的新工作中必须从头开始设计新程序.我不确定将数据从MySqlDataReader返回到自定义模型的最佳方法是什么.请指教!

这就是我所拥有的

资料夹结构:

>模型(文件夹)

> Metadata.cs
> User.cs

> MySqlDb.cs

Metadata.cs:从元数据表中重新发送数据

public class Metadata
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Sku { get; set; }
    public bool IsLive { get; set; }
}

User.cs:代表用户表中的数据

public class User
{
    public int Id { get; set; }
    public string UserName { get; set; }
    public int Age { get; set; }
    public string Address { get; set; }
}

MySqlDb.cs

using MySql.Data;
using MySql.Data.MySqlClient;
public class MySqlDb
{
    public MySqlConnection Connection { get; set;} 
    public MySqlDb(string connectionString)
    {
        Connection = new MySqlConnection(connectionString);
    }

    public List<Metadata> RunSelectQueryForMetadata(string query)
    {
        var rdr = new MySqlCommand(query, Connection).ExecuteReader();
        var metadata = new List<Metadata>();
        using (rdr)
        {
            while(rdr.Read())
            {
                metadata.Add(
                    new Metadata {
                        Id = rdr["id"],
                        Title = rdr["title"],
                        Sku = rdr["sku"],
                        IsLive = rdr["islive"],
                    });
            } // while
        } // using 

        return metadata;

    } // public void RunSelectQuery(string query)

} // public class MySqlDb

如果我尝试获取用户数据,则在考虑编写另一种方法(RunSelectQueryForUsers).我想避免针对不同的方法编写不同的方法.我不确定如何使用一种方法从具有不同数据结构的不同表中检索数据并将其类型转换为所需的模型.

任何帮助是极大的赞赏!!

最佳答案
一种方法是使用微型蠕虫,例如Dapper,它是为.Net构建的简单对象映射器. Dapper通过提供查询数据库的有用扩展方法来扩展IDbConnection.

在当前方法中实施dapper的示例:

public List<Metadata> RunSelectQueryForMetadata(string query)
{
    var metadata = new List<Metadata>();
    try // implement proper error handling
    {
        Connection.Open();
        metadata = Connection.Query<Metadata>(query).ToList();
        Connection.Close();
    }
    catch(Exception ex)
    {
        // error here
    }
    return metadata;
}

一些有用的链接:

> Dapper Github
> Dapper Tutorial

将其转换为通用方法:(目前尚未测试)

public List<T> RunSelectQuery<T>(string query)
{
    try // implement proper error handling
    {
        Connection.Open();
        metadata = Connection.Query<T>(query).ToList();
        Connection.Close();
    }
    catch(Exception ex)
    {
        // error here
    }
    return metadata;
}

并在下面使用如下代码:

List<Metadata> myMetadata = RunSelectQuery<Metadata>(query);

转载注明原文:C#-MySql-将数据从MySqlDataReader转换为不同模型的最佳方法 - 代码日志