我所拥有的是像
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之间创建关系。任何有关控制器代码的帮助都会很棒,因为我真的不知道我必须做些什么才能使这些关系发生。
答案 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();