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

关于三层架构多表查询时实体的实现
假如有一张  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 也就是将一个类分成两个文件 命名空间和类名不变