【问题标题】:Issue with InMemory DB Entity Framework Core 6 - method not foundInMemory DB Entity Framework Core 6 的问题 - 找不到方法
【发布时间】:2022-01-20 20:14:51
【问题描述】:

我正在尝试将项目从 .NET Core 3.1 迁移到 .NET 6,但测试项目出现此错误

System.MissingMethodException:找不到方法:'无效 Microsoft.EntityFrameworkCore.MutableAnnotatableExtensions.SetOrRemoveAnnotation(Microsoft.EntityFrameworkCore.Metadata.IMutableAnnotation, System.String, System.Object)'。

堆栈跟踪: 

RelationalEntityTypeExtensions.SetTableName(IMutableEntityType entityType,字符串名称)
RelationalEntityTypeBuilderExtensions.ToTable(EntityTypeBuilder entityTypeBuilder,字符串名称)
RelationalEntityTypeBuilderExtensions.ToTable[TEntity](EntityTypeBuilder1 entityTypeBuilder, String name) <>c.<OnModelCreating>b__359_0(EntityTypeBuilder1 实体) ModelBuilder.Entity[TEntity](Action1 buildAction) EntitiesContext.OnModelCreating(ModelBuilder modelBuilder) ModelCustomizer.Customize(ModelBuilder modelBuilder, DbContext context) ModelSource.CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, ModelDependencies modelDependencies) ModelSource.GetModel(DbContext context, ModelCreationDependencies modelCreationDependencies, Boolean designTime) DbContextServices.CreateModel(Boolean designTime) DbContextServices.get_Model() <>c.<TryAddCoreServices>b__8_4(IServiceProvider p) CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context) CallSiteVisitor2.VisitCallSiteMain(ServiceCallSite callSite, TArgument 参数)CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite、RuntimeResolverContext 上下文、ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType) CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext 上下文) CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument) CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context) CallSiteVisitor2.VisitCallSiteMain(ServiceCallSite callSite, TArgument 参数)CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite、RuntimeResolverContext 上下文、ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType) CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext 上下文) CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument) CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context) CallSiteVisitor2.VisitCallSiteMain(ServiceCallSite callSite, TArgument 参数)CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite、RuntimeResolverContext 上下文、ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType) CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext 上下文) CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument) CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context) CallSiteVisitor2.VisitCallSiteMain(ServiceCallSite callSite, TArgument 参数)CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite、RuntimeResolverContext 上下文、ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType) CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext 上下文) CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument) CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context) CallSiteVisitor2.VisitCallSiteMain(ServiceCallSite callSite, TArgument 参数)CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite、RuntimeResolverContext 上下文、ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType) CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext 上下文) CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument) CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context) CallSiteVisitor2.VisitCallSiteMain(ServiceCallSite callSite, TArgument 参数)CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite、RuntimeResolverContext 上下文、ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType) CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext 上下文) CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument) CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope) <>c__DisplayClass2_0.<RealizeService>b__0(ServiceProviderEngineScope scope) ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope) ServiceProviderEngineScope.GetService(Type serviceType) ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) DbContext.get_DbContextDependencies() DbContext.get_ContextServices() DbContext.get_InternalServiceProvider() IServiceProvider>.get_Instance() InfrastructureExtensions.GetService[TService](IInfrastructure1 访问器)AccessorExtensions.GetService[TService](IInfrastructure`1 访问器) DatabaseFacade.get_Dependencies() DatabaseFacade.EnsureCreated() DbContextTestBase.ctor() line 27 MessageProcessorFixture.ctor() line 29 RuntimeType.CreateInstanceDefaultCtor(布尔 publicOnly,布尔 wrapExceptions)

这是我的 InMemory 数据库构建器

public class DbContextTestBase : IDisposable
{
    private bool isDisposed = false;
    private readonly LoggerFactory _loggerFactory = new LoggerFactory(new[] { new DebugLoggerProvider() });
    protected EntitiesContext DbContext { get; }

    public DbContextTestBase()
    {
        var options = new DbContextOptionsBuilder<EntitiesContext>()
            .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString())
            .EnableSensitiveDataLogging(true)
            .UseLoggerFactory(_loggerFactory)
            .UseLazyLoadingProxies()
            .ConfigureWarnings(x => x.Ignore(InMemoryEventId.TransactionIgnoredWarning))
            .Options;

        DbContext = new EntitiesContext(options);
        DbContext.Database.EnsureCreated();
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!isDisposed)
        {
            if (disposing)
            {
                DbContext.Database.EnsureDeleted();
                DbContext.Dispose();
            }

            isDisposed = true;
        }
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }
}

发生在这一行

DbContext.Database.EnsureCreated();

任何帮助将不胜感激

【问题讨论】:

    标签: .net entity-framework-core


    【解决方案1】:

    解决方案是将我的实体包升级到 .NET 6

    【讨论】:

      猜你喜欢
      • 2017-03-24
      • 2019-07-19
      • 2017-04-04
      • 2017-08-05
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      相关资源
      最近更新 更多