8

Code First について Julie Lerman が書いた本を読んでいます。本によると、注釈と流暢なAPIは同じ結果をもたらします。すべては開発者のスタイルに依存します。

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

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

Fluent API を使用してコードを最初に構成することにした場合はどうなりますか。UI 要素に影響を与えるためにまだ注釈が必要ですか、それとも流暢な API を使用するだけで十分でしょうか?

編集

UI 目的でのみ機能する Display などのアノテーションはどうですか? 同等のものはありますか?そうでない場合、注釈を使用する必要がありますか?

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

助けてくれてありがとう

4

3 に答える 3

9

データ注釈は、何らかの検証規則を適用するようにクラスに指示する最も簡単な方法です。Fluent API でも同じことができます。データアノテーションで行うのが好きな人もいれば、流れるような API で行うのが好きな人もいます。

データ注釈を好む理由

1) エンティティに関する検証情報をエンティティ定義とともに 1 か所に保持する

Fluent API で好まれる理由

1) エンティティをクリーンに保ちます。それは私の財産情報だけを持っています。検証情報がありません。すっきりシンプルなPOCO。OnModelCreatingデータ コンテキスト クラスのメソッドに検証を記述します。

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

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

編集:質問の編集に従って、

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

于 2012-05-22T21:11:52.967 に答える
4

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

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

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

また、エンティティ型の [Required] 属性は SaveChanges 中に検証を実行しますが、viewmodel の [Required] 属性はモデル バインディング中に検証を実行します。

于 2012-05-22T21:08:54.913 に答える
1

Julie Lerman の DbContext に関する本によると、Fluent API 構成に追加の注釈は必要ありません。Name プロパティは、データ注釈で構成されているかのように、検証 API によって検証されます。

同書によると、MaxLength と Required は、流暢な API 対応する唯一の検証属性です。

于 2012-05-22T21:07:07.133 に答える