0

我有一个Patient实体(存储有关患者的最新信息)和一个实体(与“治疗计划”相同的患者日期的副本,与另一个实体无关,创建):如何将新实体与EF4中的现有实体相关联?

EF4 ORM model for my Patient entities

我使用表每-Type在这种情况下。现在,当我尝试添加记录指向它从创建PatientTreatmentPlanPatient,EF4实际上做这个:

  1. 它从数据库检索
  2. 现有患者创建一个病人副本
  3. 分配给它一个新的ID GUID(尽管StoreGeneratedPattern =无!)
  4. 插入新病人进入Patients
  5. 重写ID在我TreatmentPlanPatient实例指向这个新的病人
  6. 将新的治疗计划患者插入TreatmentPlanPatients表格中。

这是我的代码导致上述行为:

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将治疗计划患者插入TreatmentPlanPatients表中,并将其与Patients表中的现有患者相关联?

回答

1

我不确定我完全理解你要做什么,但根据你的模式,Patient表是TreatmentPlanPatients表的父项(一对多关系)。因此,您应该将TreatmentPlan添加到Patient本身而不是Patients表。因此,而不是做container.Patients.AddObject(treatmentPlanPatient),你应该做patient.TreatmentPlanPatients.Add(treatmentPlanPatient)。在这种情况下,TreatmentPlanPatients应该是Patient表/实体上的导航属性。或者,如果您确实想要使用继承,那么您必须在两个表中使用相同的主键(本例中为Id),并且具有一对一的关系。

相关问题