![](/img/trans.png)
[英]EF core - Creating a migration for a database without a connection string and in another class library
[英]Executing asp.net core EF migration in a class library without hardcoding connection string
我想在單獨的環境中執行遷移。 我正在使用實體框架和ASP.NET Core。 現在我有這個:
public class TemporaryDbContextFactory : IDbContextFactory<ApplicationDbContext>
{
public ApplicationDbContext Create(DbContextFactoryOptions options)
{
var builder = new DbContextOptionsBuilder<ApplicationDbContext>();
builder.UseSqlServer("Data Source=.\\LOCALHOST;Initial Catalog=MyDB;Integrated Security=True;MultipleActiveResultSets=true");
return new ApplicationDbContext(builder.Options);
}
}
該代碼位於DAL類庫中,該庫將數據庫交互與服務器代碼分開。
在執行遷移時可以使用此功能,但我真的不喜歡這樣做。
這里的問題是,我使用本地數據庫進行開發,但是我們也有帶有不同連接字符串的開發服務器和登台服務器。 我無法做的是找到一種不對此類中的連接字符串進行硬編碼的方法。
有沒有一種方法可以為不同的環境配置連接字符串,並指示執行遷移時使用哪個?
是的,您可以為此使用環境變量。
這就是為什么要進行appsettings.<EnvironmentName>.json
在ASP.NET Core中進行配置
不錯的Microsoft文章擅長使用多種環境
您需要將DbContextOptionsBuilder<ApplicationDbContext>
注入到工廠構造函數中,然后在主應用程序的Startup.cs
配置DbContext。
public class TemporaryDbContextFactory : IDbContextFactory<ApplicationDbContext>
{
private readonly DbContextOptionsBuilder<ApplicationDbContext> optionsBuilder;
public TemporaryDbContextFactory(DbContextOptionsBuilder<ApplicationDbContext> optionsBuilder)
{
if(optionsBuilder==null)
throw new ArgumentNullException(nameof(optionsBuilder));
this.optionsBuilder = optionsBuiler;
}
public ApplicationDbContext Create(DbContextFactoryOptions options)
{
return new ApplicationDbContext(optionsBuilder.Options);
}
}
在Startup.cs中:
services.AddDbContext<ApplicationDbContext>(options => {
options.UseSqlServer(Configuration.GetConnectionString("MyConnectionString"));
});
Configuration.GetConnectionString("MyConnectionString")
是Configuration["ConnectionStrings:MyConnectionString"]
簡寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.