Как создать динамический тип DbSet в приложении Entity Framework .Net Core? - PullRequest
1 голос
/ 28 мая 2019

В базе данных приложения время от времени будут создаваться новые таблицы. Мне нужно получить доступ к этим таблицам без изменений кода и показать содержимое таблиц в веб-приложении. Возможно, я мог бы сделать запрос на отражение, чтобы получить новые таблицы и имена их столбцов.

После этого я могу добавить динамический DbSet в контекст EntityFramework:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity("EntityName", config =>
        {
            config.Property("Id").HasColumnType("int");
            config.Property("Name").HasMaxLength(255);
            config.HasKey("Id");

        });

        base.OnModelCreating(modelBuilder);
    }

К сожалению, когда я запускаю миграцию (миграция dotnet ef добавляет MigrationName) Entity Framework показывает ошибку миграции:

System.Reflection.AmbiguousMatchException: найдено неоднозначное совпадение. в System.RuntimeType.GetMethodImplCommon (имя строки, Int32 genericParameterCount, BindingFlags bindingAttr, связыватель Binder, CallingConventions callConv, типы Type [], модификаторы ParameterModifier []) at System.RuntimeType.GetMethodImpl (Имя строки, BindingFlags bindingAttr, Binder Binder, CallingConventions callConv, Type [] types, ParameterModifier [] модификаторы) в System.Type.GetMethod (имя строки, BindingFlags bindingAttr) в DynamicEF.AppContext.OnModelCreating (ModelBuilder modelBuilder) в C: \ Users \ aleks \ Documents \ Visual Studio 2017 \ Проекты \ DynamicEF \ DynamicEF \ AppContext.cs: строка 19 в Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel (контекст DbContext, соглашение IConventionSetBuilderSetBuilder, средство проверки IModelValidator) в System.Lazy 1.ViaFactory(LazyThreadSafetyMode mode) at System.Lazy 1.ExecutionAndPublication (LazyHelper executeAndPublication, логическое использованиеDefaultConstructor) при доступе System.Lazy 1.CreateValue() at Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel() at Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model() at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) at Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies() at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider() at Microsoft.EntityFrameworkCore.Internal.InternalAccessorExtensions.GetService[TService](IInfrastructure 1) в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext (Func 1 factory) at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType) at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0 1.b__0 () в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute (Действие действия) Найдена неоднозначная совпадение.

Я запутался в "Неоднозначном совпадении найдено".

Где моя ошибка? Как мне изменить свой код, чтобы исправить процесс миграции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...