【发布时间】:2015-05-27 14:48:50
【问题描述】:
我试图让 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),但所述错误仍然没有变化。
【问题讨论】:
标签: c# entity-framework ef-code-first fluent-interface