【发布时间】:2011-08-03 04:31:59
【问题描述】:
我在 C# 中有一个像这样的对象:
private ClassWidget
{
public int ID;
public List<int> WidgetFavoriteNumbers;
}
假设我在 SQL 中有两个表,一个定义小部件属性,另一个保存单个小部件的许多记录,假设是小部件最喜欢的数字:
widgets
-----------
id (int, not null)
// other properties ...
widget_nums
----------
widget_id (int, not null)
num (int)
我发现自己经常执行两个 SQL 查询来填充这个对象,尽管我知道我可以连接这些表来创建一个查询。原因是用我需要的数据填充对象似乎更简单,而不是迭代具有大量重复数据的结果集。当然,与真实场景相比,这个小部件示例要简化得多。示例如下:
int WidgetID = 8;
ClassWidget MyWidget = new ClassWidget();
using (SqlConnection conn = GetSQLConnection())
{
using (SqlCommand cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = @"SELECT id FROM widgets WHERE id = @WidgetID;";
cmd.Parameters.AddWithValue("WidgetID", WidgetID);
using (SqlDataReader Reader = cmd.ExecuteReader())
{
if (Reader.HasRows)
MyWidget.ID = GetDBInt("id", Reader); // custom method to read database result
}
cmd.CommandText = @"SELECT num FROM widget_nums WHERE widget_id = @WidgetID;";
using (SqlDataReader Reader = cmd.ExecuteReader())
{
if (Reader.HasRows)
while (Reader.Read())
MyWidget.WidgetFavoriteNumbers.Add(GetDBInt("num", Reader));
}
conn.Close();
}
}
我的问题是我是否应该继续使用这种方法,或者是否建议执行表连接。如果推荐使用表连接,那么填充对象的最佳设计模式是什么?我的问题是我必须创建一些逻辑来过滤掉重复的行,当我获取所有小部件而不是一个小部件时尤其复杂。
【问题讨论】:
标签: c# sql one-to-many