//选项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();
}
}
我想问的问题是,这两个片段中的哪一个表现得更好。
第一种方法,它可以方便地调用类上的每个Attribute,但它需要一个嵌套连接来调用类及其属性。 示例(option1),2往返数据库,第一个是我们调用Division,第二个连接是我们调用Employee的时候。 但每次连接数据库所需的SQL对代码来说非常方便(简单和简短)。
第二种方法,使用连接查询来调用每个部门的员工。 它只需要1次往返数据库,但代码更复杂。
这些示例是嵌套OOP的一种简单形式,但是当相关表很复杂时会发生什么(例如5-6表关系),这意味着我们需要使用连接为每个表进行长而复杂的查询。
答案 0 :(得分:0)
到数据库的往返是昂贵的,所以第二个选项表现更好。如果您需要联接以更好地执行,请在divisionid
表的employee
列上添加索引。
现在第二种选择是错误的,也许你没有在这里显示它的最新版本。而不是
sql = new SqlCommand("select divisionid,divisionname from ..
应该是
sql = new SqlCommand("select a.divisionid, divisionname, empid, empname from ..
你确定该部门只有一名员工吗?