1

開発環境でSQLiteデータベースを実行し、本番環境でSQLServer Expressデータベースを実行したい。dotnet core 2の異なる環境で異なるデータベースタイプを実行する

まず、データベースの移行でコードを使用しています。

各環境に異なるdbcontextを挿入するにはどうすればよいですか?

特定のデータベースに対して移行を実行するにはどうすればよいですか。例えば。開発中に私はSQLiteデータベースに対して移行を実行したいと思うでしょう。

+0

まず、dbcontextをどのように注入しますか?私は何らかのDIコンテナを使用していると仮定しています。 IHostingEnvironmentを使用し、それに応じて適切なdbContextを注入できます。移行を実行するには、プロジェクトをポイントして実行する必要があります。 「マジック」は、移行で使用する接続文字列です。同じインタフェースを使用して、実行時に正しいインタフェースを取得することができます。これは単なるアイデアです。これは自分自身では実装されていませんが、私はそれがスタートだと思います。 – jpgrassi

+2

それ以上:環境をターゲットとする複数の設定が可能です。だから:1つのappsettings.Development.jsonとappsettings.Production.json。それぞれにそれぞれの接続文字列があります。次に、あなたは常に持っているappsettingsからconnectionstringでdbContextを設定します。 – jpgrassi

+0

@jpgrassiそれは私たちが現在行っていることです。しかし、私はsqliteデータベース対sqlserverを追加する別の方法が必要だと思う。現在、 'services.AddDbContext (options => options.UseSqlServer(this.Configuration.GetConnectionString(" DBConnection ")));'しかし、sqlite dbを使用するには 'options.UseSqlite'を呼び出す必要があると思います。 –

答えて

3

だから、私はあなたにそれをする良い方法を見つけたと思います。 ConfigureDevelopmentServices起動規則を使用して、SQLSite DbContextを追加できます。だから、ちょうどあなたが持っているでしょう、いくつかの基本的な例として:

// Production "like" ConfigureServices 
public void ConfigureServices(IServiceCollection services) 
{ 
    // Use Sql Server 
    services.AddDbContext<SchoolContext>(options => 
     options.UseSqlServer(Configuration.GetConnectionString("ProductionConnection"))); 
} 

// Development ConfigureServices 
public void ConfigureDevelopmentServices(IServiceCollection services) 
{ 
    // Use SQL Lite 
    services.AddDbContext<SchoolContext>(options => 
     options.UseSqlite(Configuration.GetConnectionString("DevelopmentConnection"))); 
} 

あなたも、さらに行くと、あなただけのステージングのための別の異なるコンテキストを持って起こる場合ConfigureStagingServicesを追加することができます。共通サービスをコピーして貼り付けるのを避けるために、共通サービスを登録し、特定のものだけを持つ専用メソッドを持つプライベートメソッドを持つことができます。

マイグレーションについてはこれをテストしたことはありませんが、正しいdbContextと正しい接続文字列があれば、マイグレーションは正常に動作します。 EFプロジェクトを指して実行するだけです。

+0

'Configure Services()'コンベンションについて知らなかった。スリック。残念ながら、SqliteはSQL Serverが実行するすべての移行をサポートしていないため、移行はより複雑になります。しかし、そこには簡単な答えがあるのか​​どうかはわかりません。先に進み、受け入れられた答えとしてマークしてください。 –

+0

喜んで助けました。うん..マイグレーションはいつも痛みがあるので、今noSQl dbを使用しているのでうれしいです:) – jpgrassi

関連する問題