4

Entity Framework に関連付けられた ObjectContext で検証結果をクリアすることは可能ですか? 私が欲しかったのは、このコードのようなものです:

public void ClearValidationResults (ObjectContext db)
{
        var dbContext = new DbContext(db, true);

        var validationResults = dbContext.GetValidationErrors();

        validationResults.Clear();
}

この機能を実装して単体テストで使用し、DataBase に変更を保存せずに検証ルールをテストしたいと考えています。ありがとう。

4

3 に答える 3

5

DbContextDbContext.GetValidationErrors()は検証エラーを保存しません。またはを呼び出すたびにエンティティを検証しますDbContext.SaveChanges()。そのため、コンテキストによって追跡されている無効なエンティティがある場合、DbContext.GetValidationErrors()常にエラーが返されます。無効なエンティティをデタッチまたは修正する必要があります。コンテキストによって追跡される無効なエンティティがなくなるため、エラーはなくなります。

于 2013-09-13T16:54:20.693 に答える
3

エンティティのローカル ストレージをクリアします。

エンティティをコレクションに追加すると、そのローカル ストレージに追加され、そのエンティティのローカル ストレージが明確ではなく、古いエントリがまだ残っているため、エラーが発生し続けました。したがって、Entity Local 行をクリアします。

dbContext.EntityName.Local.Clear();

于 2014-04-23T12:24:51.937 に答える
-3

検証エラーをクリアする必要があるたびに、新しい ObjectContext オブジェクトを作成することで問題を解決します。最もエレガントなソリューションではありませんが、機能します。このプロセスは単体テストのコンテキストにあり、単体テストは十分に高速であるため、最適な解決策が得られるまでこのコードを維持します。

public void ClearValidationResults (ObjectContext db)
{
    db =  new MyObjectContext();
}
于 2013-09-16T09:00:53.727 に答える