0

我所拥有的是类似的

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 之间创建关系。对控制器代码的任何帮助也会很棒,因为我真的不知道我必须在那里做什么才能使这些关系发生。

4

1 回答 1

0

BuildingUnit 需要一对零或一关系,而 BuildingUnitInsurance 需要一对一关系。下面的代码应该对您有所帮助,如果没有阅读更多关于配置关系的信息。

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();
于 2012-06-13T02:12:19.843 回答