我有一个包含两个导航属性的类。
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();
}
答案 0 :(得分:1)
我在MSDN上找到了我的问题的答案。
根据批准的答案(由Rowan Miller撰写),以下代码正确描述了这种关系(而不是我的代码)。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<AssetType>().HasOptional(a => a.parent).WithMany();
modelBuilder.Entity<AssetType>().HasOptional(a => a.baseAssetType).WithMany();
}