我试图让1到0..1的映射在实体框架代码中工作首先,但不断收到错误: ReferentialConstraint中的依赖属性是映射到商店生成的列。专栏:'Id'。在实体框架代码中映射1到0..1首先
我有一个MainLocation与所需的位置,但由于位置可以有多个子位置,位置对象中不需要MainLocation。
MainLocation与MainLocationAddress具有类似的关系,但这是一个1对1的关系,它依次组成相同的数据库表。
ER模型应该是这样的:
我的实体是这样的:
[Table("MainLocation")]
public class MainLocation : IEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public virtual MainLocationAddress Address { get; set; }
[Required]
public virtual Location Location { get; set; }
}
[Table("MainLocation")]
public class MainLocationAddress : BaseAddress
{
[Key, ForeignKey("MainLocation")]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
public virtual MainLocation MainLocation { get; set; }
}
public class Location : IEntity
{
public int Id { get; set; }
public virtual Location ParentLocation { get; set; }
public virtual ICollection<Location> ChildLocations { get; set; }
protected virtual MainLocation MainLocation { get; set; }
internal MainLocation GetMainLocation() { return this.MainLocation; }
internal void SetMainLocation(MainLocation mainLocation) { MainLocation = mainLocation; }
}
我在我的DbContext类配置OnModelCreating消协:
modelBuilder.Entity<MainLocation>()
.HasRequired(x => x.Location)
.WithOptional();
modelBuilder.Entity<MainLocation>()
.HasRequired(x => x.Address)
.WithRequiredPrincipal();
PS!位置上的MainLocation属性受到保护,因为它不应该直接访问。相反,我有一个服务层,它从位置获取值或从ParentLocation继承的值。我试图将其更改为公开,以查看它是否对我收到的错误进行了更改。
尽管我可以将.WithOptional()扩展为.WithOptional(x => x.MainLocation),但在声明的错误中仍然没有任何更改。