实体框架6中的多重关系从1对多变为1对0或0..1

时间:2017-05-07 20:37:09

标签: c# entity-framework code-first

我正在与两个实体县和患者合作,这些实体有一对多关系。

<div id="content">
  <div>
    <img src="//placehold.it/300x800" class="images" alt="Image of an actor from the musical Phantom of the Opera"> </div>
  <div>
    <img src="//placehold.it/300x800" class="images" alt="Image of an actor from the musical Lion King">
  </div>
  <div>
    <img src="//placehold.it/300x800" class="images" alt="Image of an actor from the musical Wicked"></div>
</div>

异常消息是:

  

违反了多重性约束。角色'Patient_County_Target'   关系'ArielOperations.Domain.Concrete.Patient_County'有   多重性1或0..1。

County实体上的调试器显示:

enter image description here

enter image description here

有人能解释这里发生了什么吗?我在这里和其他地方看过几个条目,似乎都没有。

谢谢。

1 个答案:

答案 0 :(得分:0)

我能够解决我的问题。关键似乎是避免在县内添加患者时尝试创建新的县记录。为此,我没有将County实例传递给CreatePatient方法。新患者仅包含目标县的CountyId。

Patient newPatient = new Patient
{
    PatientLastName = "Doe",
    PatientFirstName = "Jane",
    CountyName = "Denton",
    CountyId = 4
};

我们现在可以将此newPatient实例传递给CreatePatient方法。

public Patient CreatePatient(Patient patient)
{
    string errorMessage = String.Empty;
    Patient patientReturned = null;
    County county = null;

    try
    {
            using (AppContext ctx = new AppContext())
           {
               // ONLY Pre-existing counties are permitted
                county = ctx.Counties.Where(c => c.CountyName == patient.CountyName).SingleOrDefault<County>();
                ctx.Patients.Add(patient);
                ctx.SaveChanges();
                patientReturned = patient;
           }
    } // end try
    catch (Exception err)
    {
        errorMessage = err.Message;
    } // end catch (Exception err)

    return patientReturned;
} // end public Patient CreatePatient(Patient patient)

这似乎有效,甚至可以通过外键将患者连接到县记录。看来EF在这里做了一些事情来达到理想的目的。