30

パッケージ マネージャーを使用して、「update-database -verbose」をローカルで実行できます。

おそらくばかげた質問ですが、オンラインで見つけることができません.Webサイトが展開されると、サーバー上でこれを手動で実行するにはどうすればよいですか?

第二に、データベース移行を本番環境に展開するために推奨する他の戦略は何ですか?また、それらはどのように望ましいですか?

ありがとう

4

7 に答える 7

28

いくつかのオプションがあります。

  • update-database -scriptサーバー上のデータベースを更新するための SQL コマンドを生成するために使用できます。
  • のパッケージ フォルダにあるmigrate.exe実行可能ファイルを使用できます/packages/EntityFramework5.0.0/tools/migrate.exe。過去に、Jet Brains の Team City Build Server でそれを使用して、デプロイ スクリプトで移行をセットアップすることに成功しました。
  • IIS Web Deploy を使用している場合は、公開後に移行を実行するようにサーバーに指示できます (下の図を参照)。
  • 自動移行を設定することもできますが、私は物事がいつ起こるかを制御することを好みます:)

更新:また、 Sayed Ibrahim のブログもチェックしてください。彼は Microsoft の MsBuild チームで働いており、展開に関する優れた洞察を持っています。

ここに画像の説明を入力

于 2013-06-10T13:20:06.587 に答える
4

私たちにとって、DBA は本番 (および本番前) 環境にアクセスできる唯一のグループです。Update-Database -Scriptデータベースの更新に必要な Sql を取得するには、パッケージ コンソール コマンドを使用するだけです。これは、検証できる場所などに渡されます。

一部の人にとっては少し単純すぎるかもしれませんが、うまくいきます。

HTH。

于 2013-06-10T11:14:43.020 に答える
0

EF コマンド (update-database -script) を使用してスクリプトを取得するか、手動でスクリプトを記述できます。これは、本番環境でデータベースを更新する際の最も重要なことではありません。私にとって最も重要なことは、すべてのスクリプトが正しく実行され、期待どおりにレコードに影響があることを確認することです。私の意見では、運用前の環境を用意し、データベースは運用環境のコピーにする必要があります。このようにして、スクリプトを実行し、非常によく似た環境にアプリケーションをデプロイして、問題がないかどうかを確認できます。スクリプトは、DEV 環境では正しく実行されますが、運用環境では失敗することがあります。頭痛の種を避けるために、実稼働前環境で実稼働環境をシミュレートする必要があります。脚本に関しては、チームに複数の開発者がいる場合は、スクリプトを構造スクリプトとデータ スクリプトに分類することを好みます。構造スクリプトはデータベースの構造を変更し (テーブルの追加、テーブルへの列の追加など)、データ スクリプトはレコードの挿入/更新/削除を行います。また、各スクリプトは依存関係を指定して、間違った順序で実行されないようにする必要があります。テーブル A に行を挿入するデータ スクリプトは、テーブル A が作成されるまで実行できません。これが私がすることです: -実行されたスクリプトを登録するためのテーブルを定義します。例: ExecutedScriptsHistory。-各スクリプトには番号と名前があります。-スクリプトが実行された後、テーブル ExecutedScriptsHistory に新しい行が挿入されます。-スクリプトを実行する前に、依存関係をチェックします。そのために、スクリプトが実行されたかどうかを確認します (テーブル ExecutedScriptsHistory に存在します)。

スクリプトを実行した後、ExecutedScriptsHistory をチェックして、すべてのスクリプトが実行されたかどうかを確認できます。この戦略は、Microsoft が EF 移行で選択したものと似ていますが、完全に制御できます。

于 2014-06-30T01:34:40.387 に答える
0

誰にでも簡単な答えを与えるだけです。

これは、Configuration.cs の Migrations フォルダー内の "Update-Database" です。

    internal sealed class Configuration : DbMigrationsConfiguration<projectname.Models.dbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true; // Update-Data -Force (deletes columns etc)
    }

そして、リモートサーバーで最初に「移行を有効にする」には、これを Global.asax.cs ファイルに追加します。

        protected void Application_Start()
    {
        ....
        System.Data.Entity.Database.SetInitializer(new MigrateDatabaseToLatestVersion<dbContext, Migrations.Configuration>());
于 2016-06-03T01:10:57.933 に答える