日期:2014-05-20  浏览次数:20886 次

关于三层架构多表查询时实体的实现
假如有一张 student学生表 包含 studentID 编号,studentName 学生姓名,studentClassID 班级编号;和一张 studengClass 学生班级表 包含 classID 班级编号,className 班级名称
那么,如果我查询学生表时连接语句为 “ select studentID,studentName,calssName from student left join studengClass on student.studentClassID =studengClass.classID ”
如何创建实体呢

假如我这样设置

//学生表实体
public class student
{
  private int _studentID;
  private string _studentName;
  private studengClass _studengClass;
  public int studentID
  {
  get{ return _studentID;}
  set{ _studentID=value;}
  }
  public string studentName
  {
  get{ return _studentName;}
  set{ _studentName=value;}
  }
  public studengClass studengClassMo
  {
  get{ return _studengClass;}
  set{ _studengClass=value;}
  }
}
//班级表实体
public class studengClass
{
  private int _classID ;
  private string _className;
  public int classID
  {
  get{ return _classID ;}
  set{ _classID =value;}
  }
  public string className
  {
  get{ return _className;}
  set{ _className=value;}
  }
}

这样,查询的时候,用视图查出,填充到此学生实体对象,解决了多表查询的问题,基于视图设计实体对象,更改表结构时,又易于扩展。

------解决方案--------------------
假设查询出来结果存到了DataTable dt中。
studentID,studentName,calssName
那么就是

foreach(DataRow row in dt.Rows)
{
Student obj = new Student();
obj.ID = row["studentID"];
obj.studentName= row["studentName"];
obj.studengClassMo = new studengClass();
obj.calssName = row["calssName"];
//sql中少了classid

//然后add obj到Student list中

}
------解决方案--------------------
用扩展类来实现 public partial class ss 也就是将一个类分成两个文件 命名空间和类名不变