BT

Entity Framework 4.1 - バリデーション

| 作者: Roopesh Shenoy フォローする 0 人のフォロワー , 翻訳者 尾崎 義尚 フォローする 0 人のフォロワー 投稿日 2011年6月14日. 推定読書時間: 3 分 |

原文(投稿日:2011/06/06)へのリンク

バリデーションは、Entity Framework 4.1を紹介する上で、興味深い機能である。プロパティにアノテーションを追加することによって、エンティティをデータベースに保存する前に自動的に「オンデマンド」でバリデーションをかけることができる。バリデーションに関しては、Entity Framework 4.1のCTP5からRTWバージョンでも多くの改善が行われている。

ADO.NETチームは、バリデーションが実際にどう便利な機能なのかを説明している。

データベースに保存する前にエンティティのバリデーションを行うことは、コストがかかる操作です。アプリケーションの動作がもっさり見えるだけじゃなく、アプリケーションがSQL Azureを使っている場合、それぞれのトランザクションにかかるコストが実際にお金として必要になります。

そして

それに加えて、失敗した本当の原因を把握するのは、簡単ではありません。アプリケーション開発者は、ネストされた例外を開けて、データベースから投げられた本当の例外メッセージを取得して、アプリケーションユーザーになにが誤りかを見せることは通常しない(し、するべきではない)。理想としては、ユーザーは意味のあるエラーメッセージと、彼らがその値を修正して、データを保存することをリトライすることを容易にするためにエラーになった箇所を指すべきである。

エンティティのバリデーションは、System.ComponentModel.DataAnnotationsのValidatorを使用するのとどう違うのだろうか?

残念ながら、Validatorは、バリデーションされたオブジェクトの子プロパティに直接バリデーションを行うだけです。これは、他のバリデーションされた複雑な型にさらなる作業が必要になるということです。

幸運なことに、組み込まれたバリデーションは、上記のような問題を、コードを追加することなく解決することができます。

最初に、バリデーションはモデルのプロパティが、掘り下げるべき複雑なプロパティか、掘り下げるべきでないナビゲーションプロパティかを知っています。2番目に、あらゆるモデルやデータベースも明示しないモデルが使われています。3番目に、OnModelCreatingメソッドで作られた構成オーバーライドを尊重します。そして、あなたは、それをすべて使う必要はありません。

Entity Framework 4.1のCTP5からRTWの間に変更された内容は、以下の通り。

  • データベースファーストとモデルファーストは、コードファーストに加えてサポートされている。
  • MaxLengthとRequired validationは現在、スカラプロパティが対応するファセットがセットされている時に自動的に動作する。
  • LazyLoadingは、バリデーションの間は無視される。
  • 一時プロパティへのバリデーションが、サポートされるようになった。
  • オーバーライドされたプロパティへのValidation属性が公開されるようになった。
  • DetectChangesは、SaveChangesで2回呼ばれることはなくなった。
  • バリデーションの例外は、DbUnexpectedValidationExceptionにラップされるようになった。
  • すべての型レベルバリデーターは、1つ以上のエラーがあったとしても等しく実行される。

さらなる詳細は、ADO.NETチームのブログに書かれている。

MSDNの記事では、Entity Frameworkのバリデーションをどうやって使うかを学ぶことができるコードサンプルが提供されている。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT