我所拥有的是这样的
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,您需要具有一对一的关系。 下面的代码应该可以帮助您,如果没有,请阅读有关配置关系的更多信息。
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; }
}
然后在您的 OnModelCreate 处理程序中:
modelBuilder.Entity<BuildingUnit>.HasOptional(x => x.UnitInsurance).WithRequired();
modelBuilder.Entity<BuildingUnitInsurance>.HasRequired(x => x.BuildingUnit).WithOptional();