MVC3首先是可选的双向关系代码

时间:2012-05-30 18:14:26

标签: asp.net-mvc-3 model-view-controller ef-code-first bidirectional-relation

我所拥有的是像

public class BuildingUnit
{
    public int ID { get; set; }
    *irrelevant stuff removed*
    public virtual BuildingUnitInsurance UnitInsurance { get; set; }
}


public class BuildingUnitInsurance
{
    public int ID { get; set; }
    *irrelevant stuff removed*
    public virtual BuildingUnit BuildingUnit { get; set; }
}

我想要做的是使BuildingUnit与BuildingUnitInsurance的关系成为可选,但如果确实存在,则必须存在从BuildingUnitInsurance到BuildingUnit的关系。我已经尝试了很多带注释和流畅api的东西,但我还没有真正去过任何地方。

这里的实际业务案例是有一个显示来自BuildingUnit类的信息的视图,然后在该页面上可以单击一个按钮并弹出一个模式来添加保险信息。单击该模态上的“添加保险”按钮会将保险信息发布到控制器,此时应保存该信息并在BuildingUnit和BuildingUnitInsurance之间创建关系。任何有关控制器代码的帮助都会很棒,因为我真的不知道我必须做些什么才能使这些关系发生。

1 个答案:

答案 0 :(得分:0)

您需要为BuildingUnit建立一对一或一对一的关系,并为BuildingUnitInsurance提供一对一的关系。以下代码可以为您提供帮助,如果没有在Configuring Relationships上阅读更多内容。

public class BuildingUnit
{
    [Key]
    public int ID { get; set; }

    [ForeignKey("UnitInsurance")]
    public virtual int? UnitInsuranceId { get; set; }

    public virtual BuildingUnitInsurance UnitInsurance { get; set; }
}


public class BuildingUnitInsurance
{
    [Key]
    public int ID { get; set; }

    [Required]
    [ForeignKey("BuildingUnit")]
    public virtual int BuildingUnitId { get; set; }

    public virtual BuildingUnit BuildingUnit { get; set; }
}

然后在你的OnModelCreating处理程序中:

modelBuilder.Entity<BuildingUnit>.HasOptional(x => x.UnitInsurance).WithRequired();
modelBuilder.Entity<BuildingUnitInsurance>.HasRequired(x => x.BuildingUnit).WithOptional();