接続文字列を使用した最初のコード移行
-
12-11-2019 - |
質問
だから私はコードを最初に実行することができ、それは素晴らしい作品です。
私はまだアプリケーションを開発しているので、データベースの構造はファイナライズされていないので、移行を実装する必要があります。
私は続いた 公式ブログ記事 そして、そのUpdate-Databaseコマンドが機能しました。
ただし、これはSQLExpressバージョンのデータベースのみを更新します。データベースの本番バージョンはAzure上にあり、実行時に接続文字列を指定するため、Update-Databaseコマンドはその上で機能しません。
だから私の最後の質問は:実行時に接続文字列が指定されている本番データベースに自動移行を適用するにはどうすればよいですか?
解決
パッケージマネージャーコンソールで:
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つの接続文字列を指定して、コードファーストマイグレーションを使用してデプロイメントシステムを適切に構成します。
- Webで接続文字列を定義します。デフォルトのパスワードを持つconfig(prodとdev)、
- アプリケーションの構成システムにprodとdevの接続構成を知ってもらい、必要に応じてユニットテストを構築して正しいものが選択されていること*
- 採用 設定ファイルの変換 そしてそれにあなたの網を変形させてもらいなさい。生産値を持つものに設定します
- パッケージを本番環境にデプロイする(これは最も最先端の方法でなければなりません)
開発ボックスから本番環境と対話することは想定されていませんが、次の場合 本当に それを行う必要があります、そしてそれをあなたが終わったらすぐに元に戻す必要がある一時的な解決策にしてください。
別のオプションは、単にWebを使用することです。デバッグ。コンフィグとウェブ。リリース。設定し、メインのwebのための中央のテンプレートを持っています。config(これはソース管理でチェックインする唯一のものです)。
本番環境や個人開発のパスワードをチェックインしないようにしてください(if 任意)。
*デバッグシンボルを使用して、アプリケーションの実行方法を確認できます。
他のヒント
エンティティフレームワークのEFになるのはなぜですか移行add-migrationsステップには、データベース接続文字列が必要ですか?
は、長期的に労働を軽減していない解決策を持っています。 同じ名前の接続文字列を作成するように
あなたの文脈に :ベース( "dbname")
接続文字列名と初期カタログ指定したDBNAMEを一致させ、毎回接続文字列名を入力する必要はありません。