1

私は別の環境で移行を実行したいと思います。私はEntity FrameworkとASP.NET Coreを使って作業しています。今のところ私はこれを持っています:asp.netコアを実行する接続文字列をハードコードしないでクラスライブラリでEFを移行する

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クラスライブラリにあります。

マイグレーションを実行するときにこれを使用するのは問題ありませんが、このようにするのは本当に好きではありません。

私は開発用にローカルデータベースを使用していますが、開発サーバーと異なる接続文字列を持つステージングサーバーもあります。私ができないことは、そのクラスの接続文字列をハードコードしない方法を見つけることです。

異なる環境に接続文字列を設定し、移行を実行する際にどの文字列を使用するかを指定する方法はありますか?

答えて

1

はい、これには環境変数を使用できます。

あなたはappsettings.<EnvironmentName>.json

Configuration in ASP.NET Core
悪くないマイクロソフトの記事を持っている理由厥はabount Working with multiple environments


FYI
Environment.GetEnvironmentVariable

+0

私はこれをこのように構成できることを知っていました。それは私の行いましたが、どのようにマイグレーションを実行するときにどの環境を指定できるのでしょうか? –

+0

@AntoineThiry移行を実行する前にASPNETCORE_ENVIRONMENTを設定してください – galakt

+0

ありがとう、私はこの部分を逃しました、この明らかな質問をしてはいけません... –

1

あなたは工場出荷時のコンストラクタにDbContextOptionsBuilder<ApplicationDbContext>を注入し、その後でDbContextを設定する必要がありますメインアプリケーションのStartup.cs

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"]の省略形です。

関連する問題