これはEntLib-Validatorの問題です。私はEntLib 5.0とC#で、そして.NET 4.0はXPプロでプレイしています。MetadataTypeの属性の属性はEntLib検証で無視されます
T4テンプレートで生成されたビジネスオブジェクト(部分クラス)があります。だから私はentLib 5.0(msdn)のドキュメントで間違いなく推奨されているように、MetadataTypeAttribute
を使ってバリデーション属性をバディクラスに入れることにしました。 ValidatorFactoryから取得したValidator
オブジェクトは、メタデータクラスで定義されている検証属性についてはわかりません。
ビジネス・オブジェクトは、次のように定義されています。私は、検証をこの方法を実行しようとわかっている場合
public class PatientMetadata
{
[RangeValidator(4)]
public int DiagnosisCount { get; set; }
[StringLengthValidator(64, ErrorMessage = "Name must not exceed 64 chars.")]
public string Name { get; set; }
}
:このような
[MetadataType(typeof(PatientMetadata))]
public partial class Patient
{
private string _Name;
private int _DiagnosisCount;
public int DiagnosisCount
{
get
{
return _DiagnosisCount;
}
set
{
if (value != _DiagnosisCount)
{
_DiagnosisCount = value;
}
}
}
public string Name
{
get
{
return _Name;
}
set
{
if (value != _Name)
{
_Name = value;
}
}
}
}
とメタデータクラス、マニュアルに従って
var factory = ValidationFactory.DefaultCompositeValidatorFactory;
var validator = factory.CreateValidator<Patient>();
... validator
(デバッグ中)を見ていると、すでにtはちょうど子供のバリデータなしでAndCompositeValidator
です。 もう一度、Patient
クラスに検証属性を置くと、完全に機能します。
これまでのところ、私は実際のアイデアはありません。ここでは、私はドキュメントにしたがってすべてをやっていると思っています。
おかげさまで、ありがとうございました!
あなたは正しいですが、その命名の問題はここの私の例ではまさにそのケースであり、私のアプリケーション自体ではありませんでした。しかし、元のクラスにプロパティがある場合は、メタデータクラスで**プロパティ**を使用することが不可欠であることを理解しました。あなたが言ったように、彼らはドキュメントのフィールドを使用して、誤解を招くようなものだと思います。データ型は無関係で、オブジェクトを使用することを推奨しますが、必要に応じて対応する型を使用することはできます。 –