为什么要对实体扩展
原因
问题:查询所有的学生信息,同时包括:姓名、性别、年龄、学习的课程
分析:查询结果是属于多个不同实体对象的信息重组
当前问题:我们没有定义能够封装不同实体对象信息的实体类
结论
- 不可能根据用户查询的要求进行单独设计查询实体类
- 如果单独设计的实体类面对用户的不同需求,经不起考验
组合扩展实体
组合扩展实体的要求
组合扩展实体是为了满足用户查询而设计的实体类,一般由目前存在的业务实体类重新组合而成
封装组合扩展实体
class StudentAddSubject
{
public Student ObjStudent { get; set; }
public Subject ObjSubject { get; set; }
}
使用组合扩展实体封装多个对象的信息
public List<StudentAddSubject> GetStudentInforSub()
{
string sql = "SELECT ID,Name,Sex,Age,SubName FROM Student INNER JOIN Subject ON Student.SubID=Subject.SUBID ";
SqlDataReader reader = SQLHelper.GetReader(sql);
List<StudentAddSubject> list = new List<StudentAddSubject>();
while (reader.Read())
{
StudentAddSubject stu = new StudentAddSubject();
stu.ObjStudent = new Student()
{
ID = Convert.ToInt32(reader["ID"]),
Name = reader["Name"].ToString(),
Sex = reader["Sex"].ToString(),
Age=Convert.ToInt32(reader["Age"])
};
stu.ObjSubject = new Subject()
{
SubName = reader["SubName"].ToString()
};
list.Add(stu);
}
reader.Close();
return list;
}
简单扩展实体
简单扩展实体要求
主要通过继承定义扩展实体,继承原有实体对象,并扩展自己新加的属性
封装简单扩展实体
class TeacherInforSub:Teacher
{
public string SubName { get; set; }
}
public List<TeacherInforSub> GetTeacherInfors()
{
string sql = "SELECT ID,NAME,TEL,SubName FROM Teacher INNER JOIN Subject ON Teacher.SUBID=Subject.SUBID";
SqlDataReader reader = SQLHelper.GetReader(sql);
List<TeacherInforSub> list = new List<TeacherInforSub>();
while (reader.Read())
{
TeacherInforSub teacherInfor = new TeacherInforSub()
{
ID = Convert.ToInt32(reader["ID"]),
Name = reader["Name"].ToString(),
Tel = reader["TEL"].ToString(),
SubName = reader["SubName"].ToString()
};
list.Add(teacherInfor);
}
reader.Close();
return list;
}