web-dev-qa-db-ja.com

エンティティフレームワークのコードを最初に-運用データベースでUpdate-Databaseを実行する方法

実稼働データベースに対して 'Update-Database'コマンドを実行する方法を知りたい。

「Update-Database」データベースはローカルマシンで正常に機能しますが、実稼働データでこれを機能させるにはどうすればよいですか?

したがって、アプリケーションに変更を加えてからVisual Studioを介して「公開」を実行すると、コード側では問題なく動作しますが、実稼働データに対して「Update-Database」コマンドを実行するにはどうすればよいですか。

この質問が理にかなっていることを願っています...

おかげで、

67
ironman

@Davidがすでに言ったことを追加するには...

個人的に、私は「ライブ」シナリオでautomatic updatesを信用せず、常に手動のデータベース管理を好みます(つまり、共有ホスティングなどはもちろん、Dbの作成または変更に必要なpermissionsに問題があります。)-しかし、私が見た移行は、同期に関しては非常に堅実です(実際、通常、それらを「アンティ」する唯一の方法は、Dbを削除し、完全/新鮮な更新を強制することです)。

scriptsynchronize database / codeをどのように配置するか(および問題が発生した場合)について先ほど作成した投稿を以下に示します。これは(まだ)あなたには当てはまりませんが、覚えておく必要があります。

MVC3およびCode First Migrations-「データベースが作成されてから、「blah」コンテキストをサポートするモデルが変更されました」

24
NSGaga

実稼働環境でのEntity Framework(コードファースト)マイグレーションの使用 を参照して、Entity Frameworkの初期化時にアプリケーションがデータベースを自動的に更新するようにしてください。

移行を手動で制御した方が快適な場合は、開発者のコ​​ンピューターでUpdate-Databaseコマンドに-Script引数を使用して、SQLデータベースを生成し、運用データベースに対して実行できます。

http://msdn.Microsoft.com/en-us/data/jj591621.aspx (SQLスクリプトの取得セクションを参照)

31
David Moore

自動的に自動的に(-===-)データベースを最新バージョンに更新しますか?

これは良い考えではないかもしれませんが、自動移行を信頼できることがわかっている非常に単純なシナリオを除き、手動でデータベースを移行することは現実的ではありません。この回答を参照してください: https://stackoverflow.com/a/15718190/2279059 この警告を無視する場合は、先に進んでください。

以下をweb.configに追加します。

<entityFramework>
<contexts>
  <context type="MyAssembly.MyContext, MyAssembly" disableDatabaseInitialization="false">
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[MyAssembly.MyContext, MyAssembly], [MyAssembly.Migrations.Configuration, MyAssembly]], EntityFramework" />
  </context>
</contexts>

これは恐ろしく見えるかもしれませんが、基本的に次のコードと同じです:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>());

web.configでうまくいかない場合は、このコードをGlobal.asaxに入れることもできます。私は個人的にコードよりも構成を好みます。

構成ファイルをよりきれいに見せたい場合、テンプレートMigrateDatabaseToLatestVersionクラスから新しいクラスを派生させることもできます。そのため、web.cofigファイルで型引数を渡すために暗号構文を使用する必要はありません。

public class MyDatabaseInitializer : public MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration> {}

これは、データベースを最新バージョンに自動的に更新するデータベース初期化子を設定することです。

(ソースと詳細: http://www.ralphlavelle.net/2012/09/entity-framework-code-first-webconfig.html

4
Florian Winter