4

私はwinformsアプリケーションにEF5を実装しており、フォームのプライベートフィールドにコンテキスト(DBContext)を永続化しています。

エンティティを追加しようとしましたが、無効なプロパティがいくつかあるため、DBEntityValidationExceptionが発生します。次に、これらのプロパティを有効な値に設定して再度追加しようとすると、まったく同じDBEntityValidationExceptionが発生します。

何かをクリアする必要があるのだろうか?これがコードです。

private SystemEntities _context = new SystemEntities(); // class field

try
{
    Customer customer = ... // set properties here
    _context.Customers.Add(customer);
    _context.SaveChanges();
}
catch (DBEntityValidationException ex)
{
    // get exception even though properties are updated with valid values
}

エンティティを更新するときにこの問題は発生しません。どうもありがとう。

4

2 に答える 2

4

コメントは私に正しい方向を示しました。変更を保存して例外をキャッチする代わりに、最初に検証結果を取得します。

var results = new List<ValidationResults>();
Validator.TryValidateObject(entity, new ValidationContext(entity, null, null), results, true);

問題は、実際には無効なエンティティをセットに追加していたため、その後の試行で例外をスローし続けることでした。ありがとう!

于 2013-02-08T21:03:05.407 に答える
0

ここに2つの本当に良い答えがあります。このスタンドアロンの検証は素晴らしいです。私はこれを探していました。

これは、バッチ操作に非常に役立ちます。

したがって、スタンドアロン検証を使用するか、DBEntityValidationExceptionをキャッチしている場合は、DbContextのローカルキャッシュから無効なエンティティをクリアします。

于 2013-03-18T17:13:15.090 に答える