1

クラスに次のプロパティがあるとします (ここでは Code First を使用しています)。

[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }

これらの注釈で Password プロパティを装飾したくありません。可能であれば、Fluent Api を使用したいと思います。Fluent API を使用して、これらのアノテーションをいくつ実行できますか? Required と StringLength が可能であることはわかっています。しかし、ErrorMessage、DataType、および Display についてはわかりません。

4

2 に答える 2

4

私は見解を取ります:

a)本当に便利なビジネス上の制約でPOCOを飾ります。とりわけMVCとEFは、あなたにとって重要な制約のいくつかをチェックします。

b)カスタム注釈またはその他のビジネスルールのチェックをPOCOに追加できます。 興味がある場合は、サンプルのブローを参照してください。

c)DB固有のアノテーションはEFfluentAPIに属します。 それらがDB固有であり、私の見解ではPOCOに属していない場合。たとえば、テーブル名、スキーマ、外部キー、関連付けマップ、列の名前変更と無視など。

d)エラーメッセージと表示テキストはモデルビューに属します。または、少なくとも以下のPOCOの例から抽出されます。私は人々が二重の努力を嫌い、モデルビューとしてPOCOを使用し、簡単なテキストとエラーメッセージの処理を好むことを知っています。しかし、私は多言語で構成可能な完全なエラーメッセージ/テキスト処理ソリューションを好みます。POCOにテキストを貼り付けることは、私の見解では最善の解決策ではありません。

明らかにスタイルとビルドサイズが選択に影響を与え、多くの人がd)に同意しませんが、私はそれに関して大きな問題はありません。私は全体像のデザインパターンビューを撮り、それが理にかなっているところで分離して抽象化するように見えます。

ここに、注釈なしのPOCOの追加サンプルが少しありますが、そうであった可能性があります。注釈付きの素晴らしい例もいくつか見ました。このスタイルのエラーはMVCで使用でき、私の見解では注釈のテキストよりも優れています。

     public class POCODemo : IValidatableObject //various ways to trigger this. Some for free

    /// poco members .... bla bla


   //Support Business rules...
    public override IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        var vResult = base.Validate(validationContext).ToList();


        if (Poco.property1 || poco.property is nasty or xyz issue)//psuedo code for your check

                var memberList = new List<string> { "PropertyName1" };
                var err = new ValidationResult("Some Text comes from your TEXTPOOL of choice that explains the error", memberList);
                vResult.Add(err);
           // }

        }

        return vResult;
    }
于 2013-02-17T12:11:21.583 に答える
3

Required と StringLength が可能であることはわかっています。

それだけです。

同じ属性が異なる「フレームワーク」で、非常に異なる目的で使用される可能性があることに注意してください。たとえばRequired、ASP.NET MVC のコンテキストで属性を使用すると、MVC モデルの検証に使用されます。クライアント側では、ページに挿入された Javascript によって、またはサーバー側で設定されModelState.IsValidます。

このRequired属性は、エンティティを検証するために Entity Framework Code-First でも使用されますが、これは実際には MVC モデルの検証とは関係ありません。構成によって属性を Fluent APIに置き換えてRequiredも、Entity Framework に影響を与えますが、ASP.NET MVC の場合、属性を削除しただけです。つまり、プロパティは MVC 検証に必要なくなりました。ASP.NET MVC は、Entity Framework の Fluent API を気にしません。

についても同様ですStringLengthErrorMessage、属性としても、Fluent API に対応するものもありませんDataTypeDisplay

于 2013-02-15T21:48:07.933 に答える