为什么添加迁移时出现argumentNullException



我正试图在我的web api中为一对多数据库创建一个迁移。通过这种方式配置服务,并且从launchsettings.json 成功接收到连接字符串

var connectionStr = Environment.GetEnvironmentVariable("ApplicationDbContext");
services.AddDbContext<InsolationResultContext>(options =>
{
options.UseNpgsql(connectionStr, builder =>
{
builder.CommandTimeout(300);
builder.EnableRetryOnFailure(5, TimeSpan.FromSeconds(10), null);
});
});

这是型号

public class DocumentInsolationResult
{
public string Id { get; set; }
public string UserId { get; set; }
public IEnumerable<InsolationResult> Elements { get; set; }
}
public class InsolationResult
{
public string UniqueId { get; set; }
public string Insolation { get; set; }
}

和DbContext

public class InsolationResultContext : DbContext
{
public DbSet<DocumentInsolationResult> DocumentInsolationResults { get; set; }
public DbSet<InsolationResult> InsolationResults { get; set; }
public InsolationResultContext(DbContextOptions<InsolationResultContext> options)
: base(options)
{
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<DocumentInsolationResult>()
.HasMany(p => p.Elements)
.WithOne();
}
}

连接字符串如下所示:

"environmentVariables": {
"ApplicationDbContext": "Host=192.168.1.***;Port=****;Database=***.******;Username=*****;Password=****",
"ASPNETCORE_ENVIRONMENT": "Development"
},

当试图";添加Migartion Init i总是得到";值不能为null。(参数'connectionString'(。我做错了什么?在互联网上找不到答案

upd:我收到了启动时的连接字符串,这没关系,因为我在其他一些项目上使用了相同的方法来获取连接字符串

upd2硬编码连接字符串对我有效

如果使用IConfiguration而不是Environment.GetEnvironmentVariable,那么它会变得容易得多:

var connString = config.GetValue<string>("ApplicationDbContext");

应该是

"ConnectionStrings": {
"ApplicationDbContext": "Host=192.168.1.***;Port=****;Database=***.******;Username=*****;Password=****""
}

在appsettings中。Development.json文件。

因此,它给出了错误";值不能为null。(参数'connectionString'(">

在您的startup.cs文件中

services.AddDbContext<InsolationResultContext >(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("ApplicationDbContext")
});

问题出在连接字符串上。在使用appsettings或launchsettings中的连接字符串时,我无法创建迁移。在stratup.cs中对连接字符串进行硬编码后,我能够创建迁移。现在,在数据库初始化后,我将使用launchsettings中的连接字符串。这可能是EF核心的一些棘手问题。

最新更新