假设我有一个数据库,通过三张桌子将患者与医生联系起来。第三个表是关系表。
DoctorId DoctorName
------------------------
1 Dr. Jones
2 Dr. Smith
PatientId PatientName
------------------------
1 Tom Jones
2 Jerry Lewis
DoctorID PatientID
------------------------
1 1
2 1
2 2
使用实体框架,我可能会执行以下操作......
示例#1
using (var dbContext = New MyAppDBConectContainer())
{
var patient1 = new Patient {PatientName = "Tom Jones"};
var doctor1 = new Doctor {DoctorName = "Dr. Jones"};
doctor1.Patients.Add(patient1);
dbContext.Doctors.Add(doctor1);
dbContext.SubmitChanges();
}
示例#2
using (var dbContext = New MyAppDBConectContainer())
{
var doctor1 = new Doctor {DoctorName = "Dr. Smith"};
var patient1 = new Patient {PatientName = "Jerry Lewis"};
patient1.Doctors.Add(doctor1);
dbContext.Patients.Add(patient1);
dbContext.SubmitChanges();
}
如果您按照实施例#1将患者加入医生,或者如实施例#2那样将患者加入患者,是否重要?这种关系会被保留吗?
答案 0 :(得分:2)
在两种情况下都是,关系将被保留。
答案 1 :(得分:2)
如果您已在医生实体上设置患者ICollection,并在患者实体上设置ICollection of Doctors,则实体框架会推断多对多关系,两种情况都会导致相同医生,患者和交接表中的条目。
如果您需要对创建的数据库表(例如名称和键)进行更多控制,则可以使用{HasMany()
,WithMany()
和Map()
方法3}}