У меня есть объект в 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();
}
}
Мой вопрос состоит в том, должен ли я продолжать использовать этот тип подхода, или было бы рекомендовано выполнить объединение таблиц.Если рекомендуется объединение таблиц, каков наилучший шаблон проектирования для заполнения объекта?Моя проблема в том, что мне нужно создать некоторую логику для фильтрации дублирующихся строк, и это особенно сложно, когда я получаю все виджеты, а не только один.