一、EF中的实体关系
通过A 和 B表示能更好了解数据中表与表之间的关系:
1.一对一
一对一,表A中每一条记录在表 B 仅有一条数据与其对应;而表B中每一个记录,在表A中只有一条数据与之相对应。
下面用实体框架设计器的概念模型显示学生表 Student 和 学生明细DetailInfo 两个实体一对一的关系:

对应的代码实现:
public partial class Student
{
public int sno { get; set; }
public string sname { get; set; }
public int sage { get; set; }
public virtual DetailInfo DetailInfo { get; set; }
}
public partial class DetailInfo
{
public int sno { get; set; }
public int phone { get; set; }
public string address { get; set; }
public virtual Student Student { get; set; }
}
2.一对多
一对多,表A中每一条记录在表 B 中,至少有两条数据与之对应;而表B中每一个记录,在表A中只有一条数据与之相对应。
下面用实体框架设计器的概念模型显示学生表 Student 和成绩表 Score 两个实体一对多的关系:

对应的代码实现:
public partial class Student
{
public Student()
{
this.Score = new HashSet<Score>();
}
public int sno { get; set; }
public string sname { get; set; }
public int sage { get; set; }
public virtual ICollection<Score> Score { get; set; }
}
public partial class Score
{
public int sId { get; set; }
public int score { get; set; }
public int sno { get; set; }
public virtual Student Student { get; set; }
}
3.多对多
多对多,表A中每一条记录在表有B中,有多个数据相对应;而表B中每一个记录,在表A中有多条数据与之相对应。
下面用实体框架设计器的概念模型显示学生表 Student 和课程表 Cource 两个实体多对多的关系,通过成绩表 Score 作为两个表的中间桥梁:

对应的代码实现:
public partial class Student
{
public Student()
{
this.Score = new HashSet<Score>();
}
public int sno { get; set; }
public string sname { get; set; }
public int sage { get; set; }
public virtual ICollection<Score> Score { get; set; }
}
public partial class Score
{
public int sno { get; set; }
public int cno { get; set; }
public int score { get; set; }
public virtual Student Student { get; set; }
public virtual Cource Cource { get; set; }
}
public partial class Cource
{
public Cource()
{
this.Score = new HashSet<Score>();
}
public int cno { get; set; }
public string