实体框架1:mvc 5中的0..1关系

时间:2014-03-24 19:23:15

标签: c# entity-framework ef-code-first asp.net-mvc-5

我想在我的两个模型之间创建一个关系为1:0..1,但我得到的只是1 .. *关系:

public class MedicalExamination
{
    public int Id { get; set; }

    public DateTime EntryDate { get; set; }

    public DateTime ExecutionDate { get; set; }

    public DateTime AcceptanceDate { get; set; }

    public string Description { get; set; }

    public string State { get; set; }

    public string Result { get; set; }

    public string Comment { get; set; }

    public virtual Visit Visit { get; set; }

    [Required]
    public virtual ExaminationDictionary ExaminationDictionary { get; set; }

}

和我的第二个模特:

public class ExaminationDictionary
{
    [Key]
    public string Code { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }

    public decimal Price { get; set; }


    public virtual MedicalExamination MedicalExamination { get; set; }

}

在我运行并更新数据库后,我得到了这样的关系:http://scr.hu/11m6/4eny0 问题是我希望它是0..1:1的关系。有人知道一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

只有当两个表共享相同的主键时,才能实现Entity Framework中的1对1或1对0关系。

因此,例如,您的MedicalExamination可能是该关系中的主要实体。它有一个Id列主键。您的ExaminationDictionary表需要有一个Id列,它是主要的。

然后使用Fluent API描述关系:

modelBuilder.Entity<MedicalExamination>()
    .HasOptional(m=>m.ExaminationDictionary)
    .WithRequiredPrincipal(d=>d.MedicalExamination);