是否可以在EFCore中用私有或受保护的访问级别定义导航属性以使这种代码起作用:
class Model {
public int Id { get; set; }
virtual protected ICollection<ChildModel> childs { get; set; }
}
您有两个选择,可以在模型构建器中使用类型/字符串。
modelBuilder.Entity<Model>(c =>
c.HasMany(typeof(Model), "childs")
.WithOne("parent")
.HasForeignKey("elementID");
);
并非100%确信它可以与私有财产一起使用,但是应该可以。
modelBuilder.Entity<Model>(c =>
c.HasMany(typeof(Model), nameof(Model.childs)
.WithOne(nameof(Child.parent))
.HasForeignKey("id");
);
或使用背景字段。
var elementMetadata = Entity<Model>().Metadata.FindNavigation(nameof(Model.childs));
elementMetadata.SetField("_childs");
elementMetadata.SetPropertyAccessMode(PropertyAccessMode.Field);
或者尝试用一个属性
var elementMetadata = Entity<Model>().Metadata.FindNavigation(nameof(Model.childs));
elementMetadata.SetPropertyAccessMode(PropertyAccessMode.Property);
请注意,从EF Core 1.1开始,有一个陷阱:必须在所有其他.HasOne/.HasMany
配置之后最后进行元数据修改,否则它将覆盖元数据。请参阅重建关系会导致注释丢失。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句