// опция 1
public class division
{
public int DivisionId { get; set; }
public string DivisionName { get; set; }
public employee Employee { get; set; }
public class employee
{
public int EmpId { get; set; }
public string EmpName { get; set; }
public employee(int id)
{
sql = new SqlCommand("select empid,empname from employee where divisionid = '" + id + "'", conn);
conn.Open();
dt = sql.ExecuteReader(CommandBehavior.SingleRow);
if (dt.Read())
{
EmpId = id;
EmpName = (string)dt["empname"];
}
dt.Close();
conn.Close();
}
}
public division(int id)
{
sql = new SqlCommand("select divisionid,divisionname from division where divisionid = '" + id + "'", conn);
conn.Open();
dt = sql.ExecuteReader(CommandBehavior.SingleRow);
if (dt.Read())
{
DivisionId = id;
DivisionName = (string)dt["divisionname"];
Employee = new employee((int)dt["divisionid"]);
}
dt.Close();
conn.Close();
}
}
// опция 2
public class division
{
public int DivisionId { get; set; }
public string DivisionName { get; set; }
public employee Employee { get; set; }
public class employee
{
public int EmpId { get; set; }
public string EmpName { get; set; }
public employee()
{
}
}
public division(int id)
{
sql = new SqlCommand("select divisionid,divisionname from division a join employee b on a.divisionid = b.divisionid where a.divisionid = '" + id + "'", conn);
conn.Open();
dt = sql.ExecuteReader(CommandBehavior.SingleRow);
if (dt.Read())
{
DivisionId = id;
DivisionName = (string)dt["divisionname"];
Employee = new employee();
Employee.EmpId = (int)dt["empid"];
Employee.EmpName = (string)dt["empname"];
}
dt.Close();
conn.Close();
}
}
Вопрос, который я хочу задать, - какой из этих двух фрагментов работает лучше.
Первый метод, который сделал удобным вызов каждого Атрибута в классе, но он требует вложенного соединения для вызова класса и его атрибута.Пример (option1), 2 туда и обратно в базу данных, первый - когда мы вызываем Division, а второе соединение - когда мы вызываем Employee.Но SQL, необходимый для каждой поездки соединения с базой данных, очень удобен для кодирования (простой и короткий).
Второй метод, использующий запрос соединения для вызова сотрудника из каждого подразделения.Требуется только 1 поездка в базу данных, но с более сложным кодом.
Эти примеры представляют собой простую форму Вложенного ООП, но то, что произошло, когда связанная таблица сложна (например, 5-6 табличное отношение), что означаетнам нужен длинный и сложный запрос с использованием объединения для каждой таблицы.