Entity framework 如何将新实体与EF4中的现有实体关联?
我有一个Entity framework 如何将新实体与EF4中的现有实体关联?,entity-framework,inheritance,entity-framework-4,associations,table-per-type,Entity Framework,Inheritance,Entity Framework 4,Associations,Table Per Type,我有一个患者实体(存储关于患者的最新信息)和一个治疗计划患者实体(创建与此问题无关的另一个实体“治疗计划”时患者日期的副本): 在这种情况下,我使用每种类型的表。现在,当我尝试添加一个新的TreatmentPlanPatient时,它指向创建它的Patient,EF4实际上是这样做的: 它从数据库中检索现有患者 创建该患者的副本 为其分配一个新的ID GUID(尽管StoreGeneratedPattern=None!) 将新患者插入患者表 重写myTreatmentPlanPatient实例
患者
实体(存储关于患者的最新信息)和一个治疗计划患者
实体(创建与此问题无关的另一个实体“治疗计划”时患者日期的副本):
在这种情况下,我使用每种类型的表。现在,当我尝试添加一个新的TreatmentPlanPatient
时,它指向创建它的Patient
,EF4实际上是这样做的:
患者
表TreatmentPlanPatient
实例中的ID以指向此新患者治疗计划患者
表中using(var container = new SmartTherapyContainer()) {
// Look up the patient in the current container to make sure EF4 recognizes it
var patient = container.Patients.First(r => r.Id == selectedPatient.Id);
var treatmentPlanPatient = new TreatmentPlanPatient() {
Id = Guid.NewGuid(),
FirstName = patient.FirstName,
LastName = patient.LastName,
Street = patient.Street,
ZipCode = patient.ZipCode,
City = patient.City,
BirthDate = patient.BirthDate,
Telephone = patient.Telephone,
Email = patient.Email,
ClonedPatient = patient
};
// EF4 doesn't generate a separate .TreatmentPlanPatients collection :-/
container.Patients.AddObject(treatmentPlanPatient);
container.SaveChanges();
}
发生了什么事?如何让EF4将治疗计划患者插入到
treatmentplancipients
表中,并将其与Patients
表中的现有患者关联?我不确定我是否完全理解您的意图,但根据您的模式,患者表是treatmentplancipients表的父级(一对多关系)。因此,您应该将治疗计划添加到患者本身,而不是患者表。因此,您不应该执行container.Patients.AddObject(治疗计划患者),而应该执行Patient.TreatmentPlanPatients.add(治疗计划患者)。在这种情况下,TreatmentPlanPatients应该是患者表/实体上的导航属性
或者,如果您真的想使用继承,那么您必须在两个表中使用相同的主键(本例中为Id),并且具有一对一的关系