43

だから私はなんとかCodeFirstを実行することができ、それはうまく機能します。

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

私は公式ブログ投稿に従い、そのUpdate-Databaseコマンドを機能させました。

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

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

4

2 に答える 2

58

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

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())設定すると、適切な接続文字列を使用して本番環境にアプリをデプロイするときに、最初のデータベースアクセス時に、データベースが自動的に最新バージョンに移行されます。

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

アップデート

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

2つのConnectionStringを指定して、CodeFirstMigrationsを使用してデプロイメントシステムを適切に構成します。

  1. web.config(prodおよびdev)で、デフォルトのパスワードを使用して接続文字列を定義します
  2. アプリケーションの構成システムにprodおよびdev接続構成を認識させ、オプションで単体テストを構築して、適切なものが選択されていることを確認します*
  3. 構成ファイルの変換を使用して、 web.configを本番環境の値を持つものに変換します
  4. パッケージを本番環境にデプロイします(これが最も最先端の方法である必要があります

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

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

本番パスワードまたは自己啓発パスワード(ある場合)を絶対にチェックインしないように注意してください。

* DEBUGシンボルを使用して、アプリケーションがどのように実行されているかを確認できます。

于 2012-02-25T18:01:53.643 に答える
6

EntityFrameworkのEFMigrationsAdd-Migrationステップでデータベース接続文字列が必要なのはなぜですか?

長期的には労働集約的ではないと私が考える解決策があります。同じ名前の接続文字列を作成するかのように

あなたの文脈で:base( "DBName")

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

于 2013-01-11T09:58:18.123 に答える