实体框架核心:私有或受保护的导航属性

silence_coder

是否可以在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

实体框架核心导航属性错误

实体框架核心:基于导航属性的集合

实体框架核心 - 一对多但父级也具有单个子级的导航属性?

实体框架核心导航属性不保持为空

实体框架核心多对多更改导航属性名称

实体框架核心:如何确保加载导航属性?

实体框架核心多对多插入导航属性失败?

AOP - 从被拦截的类访问受保护/私有属性

实体框架(MVC)-为具有受保护属性的模型创建控制器时出现问题

具有多个条件的实体框架核心选择属性

实体框架核心将包含导航的导航属性设置为null无效

实体框架核心不会自动修复导航

实体框架核心无钥匙导航问题

实体框架中具有导航属性的延迟加载的逻辑

具有复合外键的实体框架导航属性

实体框架中的导航属性有什么作用?

在实体框架核心中以多对多关系获取导航属性时出错

实体框架核心:使用内存中的数据存储时如何测试导航属性加载

两个上下文之间的实体框架核心导航属性

公共/受保护的类属性不会覆盖父类的私有属性吗?

公共,私有或受保护的财产?

受保护的私有构造函数

实体框架核心 DbContextOptionsBuilder.UseModel 创建没有属性的实体类型

在实体框架核心中包含子属性

使用实体框架核心进行数据保护

使用 C++ 并修改基类的私有/受保护属性

Android Kotlin受保护的属性公开其私有类型ExpiresLayout

更改初始化字段的行为以创建受保护的属性,而不是私有的

从Symfony2存储库访问私有或受保护的属性