我试图让 1 到 0..1 映射以在 Entity Framework Code First 中工作,但不断收到错误: ReferentialConstraint 中的依赖属性被映射到存储生成的列。列:'Id'。
我有一个带有所需位置的 MainLocation,但由于位置可以有多个子位置,因此 Location 对象中不需要 MainLocation。
MainLocation 与 MainLocationAddress 具有类似的关系,但这是一个 1 对 1 的关系,它又构成了相同的 db 表。
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!Location 上的 MainLocation 属性受到保护,因为不应直接访问它。相反,我有一个服务层,它从位置获取值或从父位置获取继承值。我试图将其更改为公开,以查看它是否对我遇到的错误进行了任何更改。
尽管我能够将 .WithOptional() 扩展到 .WithOptional(x => x.MainLocation),但所述错误仍然没有变化。