開発環境でSQLiteデータベースを実行し、本番環境でSQLServer Expressデータベースを実行したい。dotnet core 2の異なる環境で異なるデータベースタイプを実行する
まず、データベースの移行でコードを使用しています。
各環境に異なるdbcontextを挿入するにはどうすればよいですか?
特定のデータベースに対して移行を実行するにはどうすればよいですか。例えば。開発中に私はSQLiteデータベースに対して移行を実行したいと思うでしょう。
開発環境でSQLiteデータベースを実行し、本番環境でSQLServer Expressデータベースを実行したい。dotnet core 2の異なる環境で異なるデータベースタイプを実行する
まず、データベースの移行でコードを使用しています。
各環境に異なるdbcontextを挿入するにはどうすればよいですか?
特定のデータベースに対して移行を実行するにはどうすればよいですか。例えば。開発中に私はSQLiteデータベースに対して移行を実行したいと思うでしょう。
だから、私はあなたにそれをする良い方法を見つけたと思います。 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プロジェクトを指して実行するだけです。
'Configure
喜んで助けました。うん..マイグレーションはいつも痛みがあるので、今noSQl dbを使用しているのでうれしいです:) – jpgrassi
まず、dbcontextをどのように注入しますか?私は何らかのDIコンテナを使用していると仮定しています。 IHostingEnvironmentを使用し、それに応じて適切なdbContextを注入できます。移行を実行するには、プロジェクトをポイントして実行する必要があります。 「マジック」は、移行で使用する接続文字列です。同じインタフェースを使用して、実行時に正しいインタフェースを取得することができます。これは単なるアイデアです。これは自分自身では実装されていませんが、私はそれがスタートだと思います。 – jpgrassi
それ以上:環境をターゲットとする複数の設定が可能です。だから:1つのappsettings.Development.jsonとappsettings.Production.json。それぞれにそれぞれの接続文字列があります。次に、あなたは常に持っているappsettingsからconnectionstringでdbContextを設定します。 – jpgrassi
@jpgrassiそれは私たちが現在行っていることです。しかし、私はsqliteデータベース対sqlserverを追加する別の方法が必要だと思う。現在、 'services.AddDbContext(options => options.UseSqlServer(this.Configuration.GetConnectionString(" DBConnection ")));'しかし、sqlite dbを使用するには 'options.UseSqlite'を呼び出す必要があると思います。 –