![](/img/trans.png)
[英]ASP.NET CORE MVC | System.ArgumentNullException : 'Value cannot be null. ' | Configuration.GetConnectionString
[英].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,Action1 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)的connectionString1 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,Action2 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.CallSiteVisitor2.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__101.<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.CallSiteVisitor2.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.