无法创建类型为“”的“DbContext”。异常“未将对象引用设置为对象的实例。”

问题描述 投票:0回答:1

我正在尝试在我的 Asp.net Core 8 Web API 项目中使用 Add-Migration InitialMigrations 创建迁移,但出现以下错误:

Unable to create a 'DbContext' of type 'AMSContext'. The exception 'Object reference not set to an instance of an object.' was thrown while attempting to create an instance. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728.

我在互联网上尝试了很多解决方案,但没有一个解决方案适合我。

AMSContext.cs

public partial class AMSContext :  BaseContext
{
    private readonly ICurrentUser _currentUser;

    public AMSContext(DbContextOptions<AMSContext> options,

        ICurrentUser currentUser

        ) : base(options)
    {
        _currentUser = currentUser;
    }
// Dbsets come here
}

BaseContext.cs

public abstract class BaseContext : IdentityDbContext<ApplicationUser, ApplicationRole, int, IdentityUserClaim<int>, IdentityUserRole<int>, IdentityUserLogin<int>, ApplicationRoleClaim, IdentityUserToken<int>>
{
    protected BaseContext(DbContextOptions options) : base(options)
    {

    }
    
}

Program.cs

services.AddDbContext<AMSContext>(options =>
{
    options.UseSqlServer(configuration.GetConnectionString("DefaultConnection"), o =>
    {
        o.CommandTimeout((int)TimeSpan.FromMinutes(2).TotalSeconds);
        o.MigrationsAssembly(Assembly.GetAssembly(typeofMSContext))!.FullName);
    });
    options.EnableSensitiveDataLogging();
});

添加迁移 InitialMigrations -verbose

使用项目“AMS.DATA”。使用启动项目“AMS”。构建开始...构建成功。 C:\Program Files\dotnet\dotnet.exe exec --depsfile D:\AMS\AMS\AMS in\Debug et8.0\AMS.deps.json --additionalprobingpath C:\Users\Dell\.nuget\packages --additionalprobingpath "C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages" --runtimeconfig D:\ AMS\AMS\AMS 中\调试 et8.0\AMS.runtimeconfig.json C:\Users\Dell\.nuget\packages\microsoft.entityframeworkcore.tools\8.0.3 ools etcoreapp2.0 ny f.dll 迁移添加 InitialMigrations --json --verbose --no-color --prefix-output -- assembly D:\AMS\AMS\AMS in\Debug et8.0\AMS.DATA.dll --项目 D:\AMS\AMS\AMS.Data\AMS.DATA.csproj --启动程序集 D:\AMS\AMS\AMS in\Debug et8.0\AMS.dll --startup-project D:\AMS\AMS\AMS\AMS.csproj --project-dir D:\AMS\AMS\AMS.Data\ --语言 C# --configuration 调试 --工作目录 D:\AMS\AMS --root-namespace AMS.DATA --nullable 使用程序集“AMS.DATA”。使用启动程序集“AMS”。使用应用程序库 'D:\AMS\AMS\AMS in\Debug et8.0'。使用工作目录“D:\AMS\AMS\AMS”。使用根命名空间“AMS.DATA”。使用项目目录“D:\AMS\AMS\AMS.Data\”。剩余参数: .查找 DbContext 类...查找 IDesignTimeDbContextFactory 实现...在程序集“AMS”中查找应用程序服务提供程序...查找 Microsoft.Extensions.Hosting 服务提供程序...使用环境“Develpoment”。使用 Microsoft.Extensions.Hosting 的应用程序服务提供程序。找到 DbContext“AMSContext”。正在项目中查找 DbContext 类...使用上下文“AMSContext”。 Microsoft.EntityFrameworkCore.Design.OperationException:无法创建类型为“”的“DbContext”。异常“未将对象引用设置为对象的实例。”尝试创建实例时抛出。有关设计时支持的不同模式,请参阅 https://go.microsoft.com/fwlink/?linkid=851728 ---> System.NullReferenceException:未将对象引用设置为对象的实例。

    at Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.FindCollectionMapping(RelationalTypeMappingInfo info, Type modelType, Type providerType, CoreTypeMapping elementMapping)
    at Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.\<\>c.\<FindMappingWithConversion\>b__8_0(ValueTuple\`4 k, RelationalTypeMappingSource self)
    at System.Collections.Concurrent.ConcurrentDictionary\`2.GetOrAdd\[TArg\](TKey key, Func\`3 valueFactory, TArg factoryArgument)
    at Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.FindMappingWithConversion(RelationalTypeMappingInfo mappingInfo, Type providerClrType, ValueConverter customConverter)
    at Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.FindMappingWithConversion(RelationalTypeMappingInfo mappingInfo, IReadOnlyList\`1 principals)
    at Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.FindMapping(IProperty property)
    at Microsoft.EntityFrameworkCore.Metadata.Conventions.ElementMappingConvention.\<ProcessModelFinalizing\>g__Validate|4_0(IConventionTypeBase typeBase)
    at Microsoft.EntityFrameworkCore.Metadata.Conventions.ElementMappingConvention.ProcessModelFinalizing(IConventionModelBuilder modelBuilder, IConventionContext\`1 context)
    at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ImmediateConventionScope.OnModelFinalizing(IConventionModelBuilder modelBuilder)
    at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.OnModelFinalizing(IConventionModelBuilder modelBuilder)
    at Microsoft.EntityFrameworkCore.Metadata.Internal.Model.FinalizeModel()
    at Microsoft.EntityFrameworkCore.Infrastructure.ModelRuntimeInitializer.Initialize(IModel model, Boolean designTime, IDiagnosticsLogger\`1 validationLogger)
    at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.GetModel(DbContext context, ModelCreationDependencies modelCreationDependencies, Boolean designTime)
    at Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel(Boolean designTime)
    at Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model()
    at Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServicesBuilder.\<\>c.\<TryAddCoreServices\>b__8_4(IServiceProvider p)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor\`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor\`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor\`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor\`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor\`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor\`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor\`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor\`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor\`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor\`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor\`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor\`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.\<\>c__DisplayClass2_0.\<RealizeService\>b__0(ServiceProviderEngineScope scope)
    at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(ServiceIdentifier serviceIdentifier, ServiceProviderEngineScope serviceProviderEngineScope)
    at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
    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_ContextServices()
    at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider()
    at Microsoft.EntityFrameworkCore.DbContext.Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure\<System.IServiceProvider\>.get_Instance()
    at Microsoft.EntityFrameworkCore.Infrastructure.Internal.InfrastructureExtensions.GetService(IInfrastructure\`1 accessor, Type serviceType)
    at Microsoft.EntityFrameworkCore.Infrastructure.Internal.InfrastructureExtensions.GetService\[TService\](IInfrastructure\`1 accessor)
    at Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService\[TService\](IInfrastructure\`1 accessor)
    at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType)    --- End of inner exception stack trace ---
    at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType)
    at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType, String namespace)
    at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType, String namespace)
    at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration.\<\>c__DisplayClass0_0.\<.ctor\>b__0()
    at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.\<\>c__DisplayClass3_0\`1.\<Execute\>b__0()
    at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action) Unable to create a 'DbContext' of type ''. The exception 'Object reference not set to an instance of an object.' was thrown while attempting to create an instance. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728
asp.net-core entity-framework-core ef-code-first entity-framework-migrations
1个回答
0
投票

经过大量的调试过程和对错误调用跟踪的彻底检查,我成功地识别了问题。它与两个字段相关,如提供的配置屏幕截图所示。最初在模型类中定义为 datetime configuration

后来我在模型类中将这些字段更改为 int,但忘记在 Dbcontext 模型配置中更改它们的类型。将类型从 datetime2 更改为 int 后,问题最终根据模型在 DbContext 中解决。

© www.soinside.com 2019 - 2024. All rights reserved.