В базе данных приложения время от времени будут создаваться новые таблицы. Мне нужно получить доступ к этим таблицам без изменений кода и показать содержимое таблиц в веб-приложении.
Возможно, я мог бы сделать запрос на отражение, чтобы получить новые таблицы и имена их столбцов.
После этого я могу добавить динамический 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 (Действие действия)
Найдена неоднозначная совпадение.
Я запутался в "Неоднозначном совпадении найдено".
Где моя ошибка? Как мне изменить свой код, чтобы исправить процесс миграции?