实体框架代码优先中的多个自引用属性
本文关键字:自引用 属性 框架 代码 实体 | 更新日期: 2023-09-27 18:31:17
我有一个类,其中包含两个自身的导航属性。
public class Entity
{
public int Id { get; set; }
public Entity Parent { get; set; }
public Entity BaseEntity { get; set; }
}
当我运行应用程序时,EF 会抛出一个说明,上面写着"无法确定类型'Test.Entity'和'Test.Entity'之间关联的主端。此关联的主体端必须使用关系流畅 API 或数据注释显式配置。
据我所知,当定义一对一关系并且没有提供提示让 EF 正确确定关系的双方时,会引发此异常。
现在我有两个问题。
首先,为什么在这里提出这个例外?EF 是否以某种方式将此方案视为一对一关系?
其次,如何使用属性解决这个问题?我知道以下 Fluent API 代码解决了这个问题,但我对属性更满意。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Entity>().HasOptional(e => e.Parent).WithOptionalDependent();
modelBuilder.Entity<Entity>().HasOptional(e => e.BaseEntity).WithOptionalDependent();
}
我在 MSDN 上找到了问题的答案。
https://social.msdn.microsoft.com/Forums/en-US/08bba96a-20b2-4a3c-9e0e-a5475b703dfe/code-first-self-referencing-foreign-key?forum=adodotnetentityframework
根据批准的答案(由 Rowan Miller 提供),以下代码正确描述了关系(不是我的代码)。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<AssetType>().HasOptional(a => a.parent).WithMany();
modelBuilder.Entity<AssetType>().HasOptional(a => a.baseAssetType).WithMany();
}