我正试图在我的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核心的一些棘手问题。