9

1つのデータベースに保存されている2つの別々のモデルを使用するアプリケーションがあります。最初のモデルは移行を使用してセットアップされ、データベースに移行データを作成したモデルです。2つ目は、モデルの検証をまったく必要としない非常に単純なモデルです。使用するテーブルは存在し、適切な構造になっています。2番目のコンテキストは、同じテーブル構造を持つ別のデータベースで正常に機能します。

問題は、最初のモデルと同じデータベースで実行すると、ある種のモデル検証が提供されるため失敗することです。前回の更新以降にコンテキストが変更されたと文句を言いますが、もちろん、移行データには2番目のコンテキストのテーブルに関する情報は含まれていません。

コンテキストのメタデータ検証をオフにして、2番目のコンテキストをテーブルに対してそのまま機能させることは可能ですか?

コンテキストコンストラクタではありますが、効果はありません。

4

1 に答える 1

11

解決策は、基本的に何もしない「何もしない」データベース初期化子を実装することです。

public class QueueMessageManagerContextInitializer : IDatabaseInitializer<QueueMessageManagerContext>
{
    protected void Seed(QueueMessageManagerContext context)
    {            
    }

    public void InitializeDatabase(QueueMessageManagerContext context)
    {
        // do nothing
        Seed(context);
    }
}

一度に起動コードを使用するには、次のようにします。

    [ClassInitialize()]
     public static void MyClassInitialize(TestContext testContext) 
    {
        //Database.SetInitializer<QueueMessageManagerContext>(new DropCreateDatabaseIfModelChanges<QueueMessageManagerContext>());
        Database.SetInitializer<QueueMessageManagerContext>(new QueueMessageManagerContextInitializer());
    }

シンプルだが自明ではない解決策。

編集:

さらに簡単な解決策:SetInitializer()メソッドにNULLを渡すだけです。

Database.SetInitializer<QueueMessageManagerContext>(null);
于 2013-03-26T05:25:21.320 に答える