gpt4 book ai didi

c# - 将数据库表传输到类/类到数据库表

转载 作者:搜寻专家 更新时间:2023-10-30 23:33:21 25 4
gpt4 key购买 nike

这是我要求的更详细的示例问题:Best Practice with classes and the database

我将 C# 与 Sql Server 结合使用,并将 Dapper 用作我的 ORM。

这是我的表格: enter image description here

这是我的类,它将把组件表加载到应用程序中:

class DBComponent
{
public int ID { get; set; }
public string Component { get; set; }
public int Material_ID { get; set; }
public int Color_ID { get; set; }
}

然后我需要另一个具有实际值的类:

class Component
{
public int ID { get; set; }
public string Component { get; set; }
public string Material { get; set; }
public string Color { get; set; }

public Component(DBComponent C)
{
ID = C.ID;
Component = C.Component;
Material = //queries the Material Table passing in C.Material_ID and returning the Material Value
Color = //queries the Color Table passing in C.Color_ID and returning the Color Value
}
}

我这样做的原因是我可以将这些值用于具有控件(组合框)和其他需要的 WinForm 应用程序。此外,“DBComponent”类将有一个方法,该方法将采用“Component”对象并创建一个“DBComponent”对象,该对象将作为新记录发送回数据库。

这是处理这种情况的最佳方式吗?或者有更好的方法吗?在我的另一篇文章中,有人提到 dapper 可以自行完成此操作,我不需要创建 2 个类,只需要 1 个类。怎么会这样?

最佳答案

您可以只使用一个类和一个查询来加载数据。只需构建正确的 sql 查询并让 Dapper 施展魔法,将检索到的数据映射到您的组件类。

假设你像这样改变你的组件类

public class Component
{
public int ID { get; set; }
public string ComponentX { get; set; }
public int Color_ID { get; set; }
public int Material_ID { get; set; }
public string Material { get; set; }
public string Color {get;set;}
}

现在您可以使用表之间的适当连接来检索数据

IEnumerable<Component> SelectComponents()
{
using (IDbConnection connection = OpenConnection())
{
const string query = @"SELECT p.ID, p.Component as ComponentX,
p.Color_ID, p.Material_ID,
c.Color, m.Material
FROM Component p
JOIN Color c on p.Color_ID = c.ID
JOIN Material m on p.Material_ID = m.ID";

return connection.Query<Component>(query, null);
}
}

请注意,我已将成员 Component 重命名为 ComponentX,因为成员名称不能与封闭类型同名

关于c# - 将数据库表传输到类/类到数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45968361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com