簡體   English   中英

.Net Core Migration System.ArgumentNullException:值不能為null

[英].Net Core Migration System.ArgumentNullException: Value cannot be null

這是我的DbContext

public class DocumentStudioDbContext : DbContext
{
    public DocumentStudioDbContext(DbContextOptions<DocumentStudioDbContext> options) : base(options) { }
    public DbSet<Documents> Documents { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema(schema: Environment.GetEnvironmentVariable(DSCASGlobals.DS_DatabaseSchema));
        base.OnModelCreating(modelBuilder);
    }

    public override int SaveChanges()
    {
        Audit();
        return base.SaveChanges();
    }

    public async Task<int> SaveChangesAsync()
    {
        Audit();
        return await base.SaveChangesAsync();
    }

    private void Audit()
    {
        var entries = ChangeTracker.Entries().Where(x => x.Entity is Documents && (x.State == EntityState.Added || x.State == EntityState.Modified));
        foreach (var entry in entries)
        {
            if (entry.State == EntityState.Added)
            {
                ((Documents)entry.Entity).CreatedOn = DateTime.UtcNow;
            }
        ((Documents)entry.Entity).UpdatedOn = DateTime.UtcNow;
        }
    }
}

當我嘗試運行遷移時,出現此錯誤:

System.ArgumentNullException:值不能為null。 參數名稱: 1 sqlServerOptionsAction) at DocumentStudio.Startup.<>c.<ConfigureServices>b__1_0(DbContextOptionsBuilder options) in C:\\Users\\amosa\\source\\repos\\DotNetCore\\DocumentStudio\\DocumentStudio\\Startup.cs:line 48 at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.<>c__DisplayClass1_0 Microsoft.EntityFrameworkCore.SqlServerDbContextOptionsExtensions.UseSqlServer(DbContextOptionsBuilder optionsBuilder,String connectionString,Action 1 sqlServerOptionsAction) at DocumentStudio.Startup.<>c.<ConfigureServices>b__1_0(DbContextOptionsBuilder options) in C:\\Users\\amosa\\source\\repos\\DotNetCore\\DocumentStudio\\DocumentStudio\\Startup.cs:line 48 at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.<>c__DisplayClass1_0中的Microsoft.EntityFrameworkCore.Utilities.Check.NotEmpty(String value,String parameterName)的connectionString 1 sqlServerOptionsAction) at DocumentStudio.Startup.<>c.<ConfigureServices>b__1_0(DbContextOptionsBuilder options) in C:\\Users\\amosa\\source\\repos\\DotNetCore\\DocumentStudio\\DocumentStudio\\Startup.cs:line 48 at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.<>c__DisplayClass1_0 2.b__0(IServiceProvider p, DbContextOptionsBuilder b)Microsoft.Extensions.D的Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.DbContextOptionsFactory [TContext](IServiceProvider applicationServiceProvider,Action 2 optionsAction) at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.<>c__DisplayClass10_0 1.b__0(IServiceProvider p)at Microsoft.Extensions.D ependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite,ServiceProviderEngineScope范圍)在Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor 2.VisitCallSite(IServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor 2.VisitCallSite(IServiceCallSite callSite,TArgument參數),Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine。<> c__DisplayClass1_0.b__0(ServiceProviderEngineScope范圍)。 ServiceLookup.ServiceProviderEngine.GetService(類型serviceType,ServiceProviderEngineScope serviceProviderEngineScope)
在Microsoft.Extensions.Dependency.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider提供程序,類型serviceType)上的Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService [T](IServiceProvider provider)在Microsoft.Extensions.DependencyInjection.AnityFramework.DependencyInjection.EntityFrameworkServiceCollectionExtensions。<> c__10 1.<AddCoreServices>b__10_1(IServiceProvider p) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor Microsoft.Extens的Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite,ServiceProviderEngineScope范圍)中的1.<AddCoreServices>b__10_1(IServiceProvider p) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor 2.VisitCallSite(IServiceCallSite callSite,TArgument參數) 離開.DependencyInjection.ServiceLookup.CallSiteVisitor 2.VisitCallSite(IServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitIEnumerable(IEnumerableCallSite enumerableCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor .VisitCallSite(位於Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService的Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine。<> c__DisplayClass1_0.b__0(ServiceProviderEngineScope范圍)中的IServiceCallSite callSite,TArgument參數(類型serviceType,ServiceProviderEngineScope serviceProviderEngineScope)
在Microsoft.Extensions.Dependency.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider提供程序,類型serviceType)上的Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService [T](IServiceProvider provider) Microsoft的Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.FindContextTypes()中的Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetServices [T](IServiceProvider提供程序),Microsoft的Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.FindContextType(String name)。 Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(St)中的Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name,String outputDir,String contextType)中的EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType) 環名稱,字符串outputDir,String contextType)在Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration。<> c__DisplayClass0_1。<。ctor> b__0()在Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase。<> c__DisplayClass3_0`1.b__0( )在Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)值不能為null。 參數名稱:connectionString

我的ConnectionString來自Visual Studio中設置的環境變量。 我不確定如何執行遷移。

我還需要做什么?

編輯:

Startup.cs中的DbContext

services.AddDbContext<DocumentStudioDbContext>(options => options.UseSqlServer(Environment.GetEnvironmentVariable(DSCASGlobals.DS_ConnectionString)));

EDIT2:

在此輸入圖像描述

管理以從環境變量中獲取變量

  <configuration>

          <connectionStrings>
              <add name="DocumentStudioDb"
                connectionString="Server=(localdb)\mssqllocaldb;Database=DocumentStudioDb;Trusted_Connection=True;" />
                   </connectionStrings>
   </configuration>

/////在您的上下文中編寫此代碼

 protected override void OnConfiguring(DbContextOptionsBuilder   optionsBuilder)
               {
       optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["DocumentStudioDb"]  .ConnectionString);
                }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM