Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 如何将新实体与EF4中的现有实体关联?_Entity Framework_Inheritance_Entity Framework 4_Associations_Table Per Type - Fatal编程技术网

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实际上是这样做的:

  • 它从数据库中检索现有患者
  • 创建该患者的副本
  • 为其分配一个新的ID GUID(尽管StoreGeneratedPattern=None!)
  • 将新患者插入
    患者
  • 重写my
    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),并且具有一对一的关系