ASP.NetコアAPIを構築しており、DBContextOptionsから接続文字列を取得する方法を見つけることができませんでした。ASP.NetコアのSqlServerDBContextOptionsExtensionsから接続文字列を取得する方法
私は以下のように私のstartup.csにDBContextを持っています。
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddEntityFrameworkSqlServer()
.AddDbContext<MainContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MainConnection")));
services.AddMvc()
.AddJsonOptions(opt =>
{
opt.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
});
}
私のコンテキストクラスでは、次のコンストラクタがあります。
public MainContext(DbContextOptions<MainContext> options) : base(options)
{
}
実際の接続文字列をDBContextクラスのOnConfiguringメソッドに追加しないと機能しません。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//TODO Move connection string to a secure location
optionsBuilder.UseSqlServer(@"Server= .....");
}
私はデバッグするときStartup.csがappsettings.jsonファイルから正しい接続文字列を取得していることを確認し、Configuration.GetConnectionString(「のmainConnection」)の値を調べることができます。
DIを介してDbContextクラスにオプションを渡すと接続文字列が渡されたと思いますが、DbContectクラスはOnConfiguringメソッドのoptionBuilder.UseSqlServer()を持たないと動作しません。
私は、これはSO、私はそれを使用しようとすると、オプションのプロパティから接続文字列を抽出するために、次のコードを使用する方法について協議
public ResourceDbContext(DbContextOptions options) : base(options)
{
_connectionString = ((SqlServerOptionsExtension)options.Extensions.First()).ConnectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
options.UseSqlServer(_connectionString);
}
しかし、私はAもはや存在しないことを見つけること、https://stackoverflow.com/questions/33532599/asp-net-5-multiple-dbcontext-problemsを投稿しましたoptions.Extensions
だから、私の最初の質問があるの最初の()メソッド...
ないのはなぜOnConfiguring方法
に接続文字列を追加することなくDBContextクラスの仕事接続文字列は、私はオプションではなく、明示的にOnConfiguring方法でそれを提供することよりも物体DbContextOptionsからそれを得ることができるか、OnCOnfiguring方法で必要とされている場合は私の2番目の質問は...
ある - > optionsBuilder .UseSqlServer(@ "Server = .....");内部