实体之间的关系(EF基础系列篇7)
2015-09-12 17:11
495 查看
EF实体之间的关系分为:
1.一对一;
2.一对多;
3.多对多;
一对一关系:
Student和StudentAddress之间:
一对多关系:
上面很多,就举出一例吧,Teacher和Standard
多对多关系:
Student和Course之间:
注意:需要注意的是,EF支持多对多的关系,仅仅是关联表(这里是StudentCourse),不包含Student和Course主键之外,任何其他的列的表。如果关联表包含了其他的列,比如删除日期(Datedelete),然后你必须得手动去操作,来实现多对多的关系;
我们以XML视图,来打开实体数据模型,可以看到在SSDL中,可以看到StudentCourse EntitySet实体集, CSDL不包含StudentCourse实体集,代替是的,它被映射成在Student和Course的导航属性里面,在MSL(C-S Mapping)中可以看到它在<AssociationSetMapping>节点中
所以,多对多的关系在实体数据模型的C-S mapping部分中,所以当你向Student表中添加一个Course的时候,或者向Course表中添加一个Student的时候,然后你保存的时候,将会把你插入的学生的或者课程的主键添加到StudentCourse表中,所以这个映射不仅方便关联这两个实体,而且方面管理增删查改的操作;
1.一对一;
2.一对多;
3.多对多;
一对一关系:
Student和StudentAddress之间:
public partial class Student { public int StudentID { get; set; } public string StudentName { get; set; } public Nullable<int> StandardID { get; set; } public string RowVersion { get; set; } public virtual Standard Standard { get; set; } public virtual StudentAddress StudentAddress { get; set; } }
public partial class StudentAddress { public int StudentID { get; set; } public string Address1 { get; set; } public string Address2 { get; set; } public string City { get; set; } public string State { get; set; } public virtual Student Student { get; set; } }
一对多关系:
上面很多,就举出一例吧,Teacher和Standard
public partial class Standard { public Standard() { this.Students = new HashSet<Student>(); this.Teachers = new HashSet<Teacher>(); } public int StandardID { get; set; } public string StandardName { get; set; } public string Description { get; set; } public virtual ICollection<Student> Students { get; set; } public virtual ICollection<Teacher> Teachers { get; set; } }
public partial class Teacher { public Teacher() { this.Courses = new HashSet<Course>(); } public int TeacherID { get; set; } public string TeacherName { get; set; } public Nullable<int> StandardID { get; set; } public string TeacherType { get; set; } public virtual ICollection<Course> Courses { get; set; } public virtual Standard Standard { get; set; } }
多对多关系:
Student和Course之间:
public partial class Student { public Student() { this.Course = new HashSet<Course>(); } public int StudentID { get; set; } public string StudentName { get; set; } public Nullable<int> StandardID { get; set; } public string RowVersion { get; set; } public virtual Standard Standard { get; set; } public virtual StudentAddress StudentAddress { get; set; } public virtual ICollection<Course> Course { get; set; } }
public partial class Course { public Course() { this.Student = new HashSet<Student>(); } public int CourseID { get; set; } public string CourseName { get; set; } public string Location { get; set; } public Nullable<int> TeacherID { get; set; } public virtual Teacher Teacher { get; set; } public virtual ICollection<Student> Student { get; set; } }
注意:需要注意的是,EF支持多对多的关系,仅仅是关联表(这里是StudentCourse),不包含Student和Course主键之外,任何其他的列的表。如果关联表包含了其他的列,比如删除日期(Datedelete),然后你必须得手动去操作,来实现多对多的关系;
我们以XML视图,来打开实体数据模型,可以看到在SSDL中,可以看到StudentCourse EntitySet实体集, CSDL不包含StudentCourse实体集,代替是的,它被映射成在Student和Course的导航属性里面,在MSL(C-S Mapping)中可以看到它在<AssociationSetMapping>节点中
所以,多对多的关系在实体数据模型的C-S mapping部分中,所以当你向Student表中添加一个Course的时候,或者向Course表中添加一个Student的时候,然后你保存的时候,将会把你插入的学生的或者课程的主键添加到StudentCourse表中,所以这个映射不仅方便关联这两个实体,而且方面管理增删查改的操作;
相关文章推荐
- WeakReference 详解
- php 所有主流框架性能对比(yii、yaf、ci等php框架)
- LCA的离线算法 tarjan
- CSS实现带阴影效果的黑色导航菜单效果
- CMake 学习笔记 —— 进阶
- 面试题18:树的子结构
- 文本文件和二进制文件的区别
- POJ-1504
- Hibernate中,各表映射文件...hbm.xml详解
- 21_03_httpd属性配置
- iOS7系统iLEX RAT冬青鼠安装教程:无需刷机还原纯净越狱系统
- 自定义组件之-利用已经用的组件进行二次的组件开发
- Search a 2D Matrix
- CSS的盒模型及元素分类(块级元素、内联元素、内联块状元素)
- ios开发中MVC详解
- 这样聪明的人得善待
- 超级邮件群发机12.32完美破解版---日轻松发万封邮件,方法对了每天发不了万封你骂我
- Week1-6Analysis of Algorithm Introduction
- “TI门外汉”网路知识笔记二 交换技术vlan
- 关于spring配置文件的继承和抽象属性