web-dev-qa-db-ja.com

接続文字列を使用したコードファーストの移行

だから、私はCode Firstを実行することに成功しました。

私はまだアプリケーションを開発しているので、データベースの構造は最終化されていないため、移行を実装する必要があります。

Official Blog Post に従い、Update-Databaseコマンドが機能するようにしました。

ただし、これはデータベースのSQLExpressバージョンのみを更新します。データベースの実稼働バージョンはAzure上にあり、実行時に接続文字列を指定しているため、Update-Databaseコマンドは機能しません。

私の最後の質問は、実行時に接続文字列が指定されている本番データベースに自動移行をどのように適用するのですか?

37
Dragonseer

パッケージマネージャーコンソールで、次のように入力します。

_Get-Help Update-Database_

関連部分:

_    Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] [-ConnectionStringName <String>] [<Com
monParameters>]
_

したがって、_Update-Database -ConnectionStringName "MyConnectionString"_を実行でき、チャームのように機能するはずです。

MigrateDatabaseToLatestVersionデータベース初期化子もあります。(Database.SetInitializer()を介して)設定した場合、適切な接続文字列を使用して実稼働環境にアプリをデプロイすると、最初のdbアクセスで自動的にdbを移行します最新バージョンに。

ただし、常にバックアップすることをお勧めします。

更新

@Alexy Strakhの最近のコメントは、答えを出す価値のある別の議論を生み出しました。

2つの接続文字列を指定して、Code First Migrationsを使用して展開システムを適切に構成します。

  1. デフォルトのパスワードを使用して、web.config(prodおよびdev)で接続文字列を定義します
  2. アプリケーションの構成システムにprodおよびdev接続構成を認識させ、必要に応じてユニットテストをビルドして適切なものが選択されるようにします*
  3. config file transformation を使用し、web.configを製品値を持つものに変換します
  4. パッケージを実稼働環境に展開します( これが最も最先端の方法でなければなりません

開発ボックスから本番環境と対話することは想定されていませんが、実際にそれを行う必要がある場合は、それを必要とする一時的なソリューションにします完了したらすぐに元に戻ります。

別のオプションは、単にWeb.Debug.configとWeb.Release.configを使用し、メインweb.configの中央テンプレート(ソース管理でチェックインする唯一のテンプレート)を持つことです。

本番パスワードまたは個人開発パスワード(存在する場合)をチェックインしないようにしてください。

* DEBUGシンボルを使用して、アプリケーションの実行方法を確認できます。

51
WDRust

Entity FrameworkのEF Migrations Add-Migrationステップでデータベース接続文字列が必要な理由

長期的には労働集約的ではないと考えるソリューションがあります。同じ名前の接続文字列を作成するかのように

あなたのコンテキストで:base( "DBName")

接続文字列名と初期カタログは指定したDBNameと一致するため、接続文字列名を毎回入力する必要はありません。

6
P6345uk