2

新しい新しい移行サポートを利用している新しい EF5 Code First アプリで、この奇妙なことが起こっています。私が見ていることの 1 つは、データベースのシード処理ルーチンが最初の DB ロードで実行されていることですが、奇妙なのは、アプリがしばらく実行されなかった後に再び実行されているように見えることです。これは予想されることですか?これが起こらないようにする最善の方法は何ですか?

.AddOrUpdate() 全体を取得しますが、アプリが最初に実行されて DB スキーマが作成されたときよりも多く実行されるのは奇妙に思えます。アイデア?

4

2 に答える 2

2

はい、これは予想される動作です。Seed メソッドは、適用するスキーマの変更がない場合でも実行されます。

Seed メソッドで大量の作業が行われており、より詳細な制御が必要な場合は、プロジェクトの .config ファイルにアプリ設定を追加するなどの操作を行うことができます。

<appSettings>
    <add key="seedDatabase" value="true"/>
</appSettings>

次に、Seed メソッドの設定を確認します。

protected override void Seed(BarDb context)
{
    if(ConfigurationManager.AppSettings["seedDatabase"] == "true")
    {
        // ... seed logic
    }            
}
于 2012-11-02T12:35:38.863 に答える
0

私の理解ではAutomaticMigrationsEnabled、構成でtrueに設定すると、アプリが起動するたびに移行がトリガーされます(おそらく、アプリがしばらく実行されていないときにその動作が見られるのはそのためです)。

問題は、移行するものがない場合でも、移行コードがシードを実行することです。@OdeToCode に似たソリューションを使用しますが、DB 自体を使用してチェックを実行したいと思います (テーブルが空の場合のテストなど)。

実際、新しいEnable-MigrationsコマンドはAutomaticMigrationsEnabled、生成されたファイルで を false に設定しConfiguration.csます。

イニシャライザは確かにDBを設定する別の形式であり、あなたが正しく言うように、毎回DBを既知の状態にリセットできるテスト/プロトタイピングのコンテキストでより便利です。機能が重複しているように見えますが、目的が異なります。本番 DB では、事前に作成された初期化子のいずれも使用しません。

于 2013-01-21T11:20:21.070 に答える