私は新しいプロジェクトを開始する準備をしており、エンティティ フレームワークを研究しています。私の質問は、エンティティを検証するための最良の戦略は何ですか? 私が取り組んできた他のプロジェクトでは、ほとんどの検証に属性を使用していましたが、明らかにこれはエンティティ フレームワークでは不可能です。プロパティセッターで部分メソッドを処理することによってこれを行う唯一の方法はありますか? すべてのアドバイスは大歓迎です。
6 に答える
エンティティ フレームワークを実際に使用したことはありませんが、簡単に検索すると、いくつかのオプションがあることがわかります。
1) アプリケーションの別のレイヤーで検証する
常にオプションです。私はそれを明示的に捨てると思っていました。
2) エンティティの OnChanged イベントにフックし、検証を実行します。
エンティティごとに変更できるさまざまなプロパティが多数ある場合、もろく、後で混乱したり遅くなったりする可能性があります。
3) プロパティの変更を検証する部分メソッドを実装する
この投稿とこのウォークスルーによると、検証に使用できる部分的な方法があります。これはあまり邪魔にならず、必要な検証を選択的に実装できるため、最良の選択肢のようです。
それが役立つことを願っています。幸運を。
.NET 4では、Entity-Frameworkですぐに使用できる検証がサポートされる予定です。
チェックアウト: http: //blogs.msdn.com/adonet/archive/2010/01/13/introducing-the-portable-extensible-metadata.aspx
したがって、複雑すぎる検証ロジックの実装に一生懸命取り組んではいけません...
ASP.NET MVC を使用する場合は、検証アプリケーション ブロックまたは System.ComponentModel.DataAnnotations を使用できます。Using Data AnnotationsとUsing Application Blockの記事では、Linq を使用してそれらを行う方法を示していますが、entity-framework での使用法も同様である必要があります。
オブジェクト コンテキストをオーバーライドし、SaveChanges() メソッドをインターセプトしました。
public abstract class ValidationObjectContext : ObjectContext{
...
public override int SaveChanges(SaveOptions options){
ValidateEntities();
return base.SaveChanges(options);
}
}
そうすれば、検証は接続が行われる直前まで残されますが、グラフに満足してコミットする準備ができた後 (期待) になります (変更の検証に対する他のオプションとは対照的に、次のようないくつかの複雑なルールがあるため)。私たちが持っているものは、いくつかのプロパティが設定された後にのみ有効です。) 2 つのレベルの検証、基本プロパティの検証、文字列の長さ、null 可能性などがあります。ビジネス ロジックの検証では、複数のオブジェクトにわたってルールをチェックする必要があり、確認のためにデータベースにアクセスする可能性があります。
WPF または Windows フォームを使用している場合は、IDataErrorInfoインターフェイスを実装できます。
WPF Application Framework (WAF)プロジェクトのBookLibraryサンプル アプリケーションは、Entity Framework によって作成されたエンティティを検証する方法を示しています。
エンティティに IValidatableObject を実装することを検討してください。