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),並且具有一對一的關係。

相關問題