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

胞嘧啶

我正在使用实体框架核心 (2.0.1) 开发 .NET Core 项目。

我有一个插件架构,需要根据附加的插件加载不同的模型,因此在使用 DbContextOptionsBuilder.UseModel 方法将 dbcontext 添加到 DI 容器时尝试动态加载模型。

无论我是定义新模型还是模型构建器,我添加的实体类型似乎都没有正确执行,并且一旦添加到 dbcontext 中似乎没有任何属性。

我不确定是否需要添加一个约定才能使其正常工作,或者我可能缺少什么。任何帮助,将不胜感激。

_services.AddDbContext<DataContext>(options =>
        {
            switch (_config.DatabaseType.ToLower())
            {
                case "postgres":
                    options.UseNpgsql(_config.ConnectionString);
                    break;
                case "sqlserver":
                    options.UseSqlServer(_config.ConnectionString);
                    break;
            }

            var convention = new Microsoft.EntityFrameworkCore.Metadata.Conventions.ConventionSet();
            var mb = new ModelBuilder(convention);
            foreach (var definition in definitionList)
            {
                mb.Entity(definition.Type);
            }
            options.UseModel(mb.Model);
        });

解析为:

在此处输入图片说明

正确创建了 5 个实体类型,但是一旦我展开其中一个实体类型,它就没有任何属性。

在此处输入图片说明

如果我使用通过覆盖 dbcontext onmodelbuilding 来添加 EntityType 的标准约定来做同样的事情,那么属性都在那里正确......

是的,几个默认的公约,其中之一是PropertyDiscoveryConvention它喜欢它的声音会确保让所有的属性默认情况下添加,但也像其他可能的重要的KeyDiscoveryConvention公约,即采取标识映射的照顾,和大量属性。

您可能可以确保创建正确的约定,但将逻辑移到数据库上下文中可能更容易。这样您就可以像通常那样在所有标准约定的基础进行构建,而您无需自己处理这些。所以也许是这样的:

class MyContext : DbContext
{
    private readonly IDbContextConfigurator _dbContextConfigurator;
    public MyContext(DbOptions<MyContext> dbOptions, IDbContextConfigurator dbContextConfigurator)
        : base(dbOptions)
    {
        _dbContextConfigurator = dbContextConfigurator;
    }


    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        _dbContextConfigurator.Configure(modelBuilder);
    }
}

因此,IDbContextConfigurator您可以在其中检索配置并直接在模型构建器上配置模型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

与实体框架核心的左外连接

来自分类Dev

实体框架核心:如何添加复合对象?

来自分类Dev

检索由实体框架核心生成的SQL

来自分类Dev

实体框架核心多对多未插入

来自分类Dev

带有实体框架核心的NoSQL

来自分类Dev

实体框架核心(7)批量更新

来自分类Dev

实体框架核心上没有CreateStoredProcedure方法

来自分类Dev

实体框架核心-更改“ __EFMigrationsHistory”表的架构

来自分类Dev

实体框架核心.include()问题

来自分类Dev

实体框架核心不包含“包含”的定义

来自分类Dev

实体框架核心的反向引擎

来自分类Dev

强类型的ID在实体框架的核心

来自分类Dev

实体框架核心加入并包含内部实体

来自分类Dev

实体框架核心3模拟PARTITION BY

来自分类Dev

实体框架核心级联删除

来自分类Dev

实体框架核心组按日期范围

来自分类Dev

实体框架(核心)-级联删除

来自分类Dev

如何使用实体框架核心3.1.1为拥有的实体类型设置复合主键?

来自分类Dev

找不到实体类型的属性的后备字段,并且该属性没有吸气剂

来自分类Dev

实体框架核心ForEachAsync

来自分类Dev

实体框架核心收益

来自分类Dev

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

来自分类Dev

实体框架的核心所在

来自分类Dev

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

来自分类Dev

具有实体框架核心5.0的UWP

来自分类Dev

实体框架核心上没有CreateStoredProcedure方法

来自分类Dev

实体框架核心.include()问题

来自分类Dev

使用实体框架或实体框架核心删除父子关系

来自分类Dev

渴望加载实体框架核心