C# 将数据库表传输到类/将类传输到数据库表
这是我问的一个更详细的示例问题: 我在Sql Server中使用c,并使用Dapper作为我的ORM 这是我的桌子: 下面是将组件表加载到应用程序中的类:C# 将数据库表传输到类/将类传输到数据库表,c#,database,oop,dapper,C#,Database,Oop,Dapper,这是我问的一个更详细的示例问题: 我在Sql Server中使用c,并使用Dapper作为我的ORM 这是我的桌子: 下面是将组件表加载到应用程序中的类: 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 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应用程序的值用于controlscombobox和其他需要。DBComponent类还有一个方法,该方法将获取一个组件对象并创建一个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);
}
}
请注意,我已将成员组件重命名为ComponentX,因为您不能拥有与封闭类型同名的成员名称您可以使用隐式运算符来完成此操作。看看这里:@Egbert我可以看到这里如何使用隐式,我不认为我会在这种情况下使用它,但我喜欢这个概念,我会在我的项目的其他部分使用隐式,谢谢!所以从技术上讲,我不需要在类中使用颜色ID和材质ID来进行查询,对吗?不,如果您愿意,可以避免使用它们,但在将来使用它们并没有什么坏处。当然,您不会向用户显示这些值,但这只是UI界面的问题。太好了!我感谢你的帮助,这比我想象的要容易得多。这完全取决于查询。谢谢