我实现了 IDesignTimeDbContextFactory 以使用EF迁移,并且需要从 CreateDbContext 方法读取appsettings.json文件。
问题在于appsettings.json位于另一个程序集中。
public DataContext CreateDbContext(string[] args)
{
var builder = new DbContextOptionsBuilder<DataContext>();
var connectionString = _configuration.GetConnectionString("Database:ConnectionString");
builder.UseSqlServer(connectionString, option =>
{
option.MigrationsAssembly("MyDbContextAssembly");
});
return new DataContext(builder.Options);
}
在此类上,我需要无参数构造函数,并且无法注入IConfiguration。
如何解决此问题?
答案 0 :(得分:1)
然后在功能内构建配置。您可以设置应该从中加载设置的基本路径
public DataContext CreateDbContext(string[] args) {
// Build config
IConfiguration configuration = new ConfigurationBuilder()
.SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../Relative path here"))
.AddJsonFile("appsettings.json")
.Build();
// Get connection string
var builder = new DbContextOptionsBuilder<DataContext>();
var connectionString = configuration .GetConnectionString("Database:ConnectionString");
builder.UseSqlServer(connectionString, option =>
{
option.MigrationsAssembly("MyDbContextAssembly");
});
return new DataContext(builder.Options);
}
找到了具有更多自定义功能的实用文章here。