我試圖讓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),但在聲明的錯誤中仍然沒有任何更改。