-1

ビジネスアプリケーションでSilverlight+EntityFramework+RIAサービスを使用しています。基盤となるデータベーステーブルには、HumansテーブルとHumanAddressesテーブルが含まれます。すべての人間は、さまざまなタイプ(自宅、仕事、出生地など)の1つ以上の住所を持つことができます。タイプ「ホーム」のアドレスが常に少なくとも1つ存在する必要があります。

UIを使用すると、送信する前に、特定の人間の新しいいくつかのアドレスを編集、削除、および追加できます。これらの変更が予測されたルールに違反しているかどうかを確認するために、検証を実行する必要があります。これを行うための最良の方法は何ですか?

CustomValidationAttributeを使用してみましたが、(AFAIK)エンティティレベルの検証のみが許可され、複数のエンティティ間の検証は許可されません。一部のエンティティは削除され、その他は追加または変更されます。

4

1 に答える 1

1

他のエンティティにアクセスする必要がある場合は、データベース コンテキストで ValidateEntity をオーバーライドする必要があります。これは、SaveChanges() を呼び出すときに変更されたすべてのエンティティに対して呼び出されます。

protected override DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, IDictionary<object, object> items)
{
    DbEntityValidationResult result = new DbEntityValidationResult(entityEntry, new List<DbValidationError>());
    result = base.ValidateEntity(entityEntry, items);
    //Do your validation
    if(invalid)
    {
        result.ValidationErrors.Add(new DbValidationError("Property", "Error Message"));
    }
    return result;
}

EF http://msdn.microsoft.com/en-us/data/gg193959.aspxの検証オプションは次のとおりです。

于 2013-02-08T17:38:32.683 に答える