4

私は Entity Framework と MVC 4 を初めて使用し、Microsoft の Web サイトにあるミュージック ストア アプリケーションのチュートリアルに従っています (私のニーズに合わせて若干の調整を加えています)。Code First を使用して作成されたリモート データベースがあります。これには、SampleData曲、アーティスト、ジャンルなどに関する情報を含むクラスが含まれます。すべてのテーブルを作成した後、これをデータベースに入力します。これはうまくいっています。

ただし、クラスにいくつかの変更を加えたので、データベースを削除せずSampleDataに、そのデータでデータベースを更新します (削除された行を削除し、追加された新しい行を挿入するなど) 。私のデータベース管理者は DROP コマンドを実行することを許可していないため、Seed を使用しても機能しません。私はこれをローカルで実行しましたが、データベースを削除し、テーブル (モデルは同じです) と新しいサンプル データを使用してデータベースを再度作成しました。DropCreateDatabaseAlways

サンプル データを更新するたびにデータベースを削除せずにこれを行う方法はありますか? 多分 Code First Migrations (私のモデルは変更されていませんが、データだけです)?

4

1 に答える 1

6

このメソッドは減価償却されています。一番下までスキップしてください。

コード ファーストのデータ移行を使用できます。

サンプル データ (EF ではシード データと呼ばれます) を更新するには、移行フォルダーの Configuration.cs を編集し、変更するデータを次のように追加または更新します。

protected override void Seed(icicle.Models.icicleEntities context)
{
    //  This method will be called after migrating to the latest version.

    //   You can use the DbSet<T>.AddOrUpdate() helper extension method 
    //   to avoid creating duplicate seed data. E.g.

    context.Widgets.AddOrUpdate(new Widget()
    {
         Id = 1,
         Name = "My Really Awesome Widget"
    });
}

新しいパラダイムの下では、[ツール] -> [ライブラリ パッケージ マネージャー] -> [パッケージ マネージャー コンソール] に移動し、次のスクリプト行を実行するだけです。

Update-Database -ConnectionStringName "YourConnectionStringNameGoesHere" -Verbose
于 2012-12-18T04:33:05.137 に答える