2012-05-22 12 views
6

私はコード・ファーストでJulie Lermanが書いた本を読んでいます。本によると、注釈と流暢なAPIは同じ結果を与える。すべては開発者のスタイルに依存します。コード1:流暢なAPIはUIに影響しますか?

注釈は、コードが最初にデータベースオブジェクトを生成する方法と、MVCがUI要素をカスタマイズする方法の両方を構成できることを知っています。たとえば、[Required、MaxLength(50)]を使用します。この属性は、データベースにNOT NULL、nvarchar(50)を生成します。また、そのフィールドの入力を検証します。

[Required, MaxLength(50)] 
public string Name { get; set; } 

コードを最初に設定するためにFluent APIを使用することにした場合はどうなりますか? UI要素に影響を与えるために注釈が必要なのか、流暢なAPIを使用すれば十分でしょうか? UIの目的のためにのみ機能し、ディスプレイなどの注釈、およそ

EDIT

どのように?彼らは同等のものを持っていますか?そうでない場合は、annotionsを使用する必要がありますか?

[Display(Name = "Date of Birth")] 
public DateTime BirthDate { get; set; } 

DbContextのジュリー・ラーマン氏の著書によると

答えて

9

データアノテーションは、クラスにいくつかの検証ルールを適用するように指示する最も簡単な方法です。 Fluent APIでも同じことができます。流暢なAPIを使用したデータの注釈

1でそれを好きに

理由をすることによって、データの注釈およびそれのようないくつかの人々によってそれを行うのような一部の人々は)と一緒に一つの場所に私のエンティティに関する検証情報を保管してください

理由エンティティ定義が流暢API

1)きれいな私のエンティティをキープして、それを好きに。それは私のプロパティ情報だけを持っています。検証情報がありません。クリーンで簡単なPOCO。自分のデータコンテキストクラスのOnModelCreatingメソッドで検証を記述します。

Data Annotationsの方法ですべてのFluent APIを行うことはできません。同じように、Fluent APIの方法(例:HasMinLength)には存在しないData Annotations属性を持つことはほとんどありません。 HasMinLengthは、通常UIで意味をなさないモデル検証のためのものです。

UIモデルの検証では、Fluent APIだけを使用することはできません。 Fluent APIの主な役割は、私たちが書いた流暢な構成を調べて、モデル(データベース)をエンティティから作成するときにを実行することです。 流暢なAPI設定を書くには、OnModelCreatingメソッドをオーバーライドすることに注意してください。私のViewModelのUI検証では、私はDataAnnotationの方法を使い、流暢なAPIを使いたいと思っています。外部キーを定義したり、このエンティティを別の名前でテーブルにマップするなどのデータモデルに関連するものを定義したいとします。

EDIT:質問の編集を1として

あなたは、この場合のデータ注釈を利用する必要があります。あなたがコードを最初にやっているのなら。そのエンティティがデータベーステーブルになることを覚えているかもしれません(もちろん、EFに特定の列を無視/名前変更するよう指示できます)。その場合、私はEntitiesをきれいにして、私のUIで使用するViewModelを作成します。私はViewModelに私のDataAnnotationsを加えてそれを扱います。必要に応じて、ViewModelからModelとModelへのデータをViewModelにマップするマッピングコードを書くことができます。

+0

お願いします、投稿の編集をご覧ください。 – Richard77

+0

@ Richard77:私の更新された答えを見てください。 – Shyju

+0

今、それは私の頭の中で意味をなさない。ありがとうございました – Richard77

1

を支援するためのおかげで、あなたはあなたの流暢APIの設定に追加の注釈を必要としません。 Nameプロパティは、Data Annotationsで設定されているかのように検証APIによって検証されます。

同じ書籍によると、MaxLengthとRequiredは、流暢なAPIコンターパートの唯一の検証属性です。

+0

お願いします。投稿の編集をご覧ください。 – Richard77

4

エンティティモデルクラスがビューモデルクラスとして倍増していて、既定のままのDataAnnotationsValidationProviderを使用している場合は、検証のためにモデルプロパティにdataannotations属性が必要です。

ただし、エンティティクラスをviewmodelクラスとして倍にしないでください。たとえば、そのモデルにReturnUrlプロパティが必要なコントローラを考えてみましょう。あなたはあなたのエンティティモデル/データベースでこれを望みません。このようにViewモデルとEntityモデルの違いがあるため、2つは実際にはアプリケーション内に別々の(まだ凝集していない)レイヤーである必要があります。あなたは、AutoMapperのようなライブラリを使って結束させることができます。

これは私が流暢なAPIを好む理由の1つです。流暢なAPIに固執すれば、どんなエンティティモデルのクラスやプロパティにも属性を置くことはありません。データを表示、挿入、または更新するときは、属性をviewmodelクラスにのみ配置します。

また、エンティティタイプの[必須]属性はSaveChanges中に検証を実行しますが、ビューモデルの[必須]属性はモデルバインド中に検証を実行します。

関連する問題