私はEF4が初めてです。継承、検証について考えたことを何度か投稿しましたが、私の全体的な目的は、作成するコードの量を可能な限り減らすことです。私は(まだ)POCO、大量のObjectContextいじりには興味がありません。EFの利点と最小限のコーディングが必要です。
したがって、検証の厄介な問題です。この単純化された例を見てください。(DRY Buddies と危険な usings エイリアスは別として)、これは半分まともなアプローチのように見えますか?
namespace Model
{
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
using DataAnnotations = System.ComponentModel.DataAnnotations;
using Validation = Microsoft.Practices.EnterpriseLibrary.Validation;
[HasSelfValidation]
[DataAnnotations.MetadataType(typeof(PersonValidator))]
public partial class Person
{
[SelfValidation]
public Validation.ValidationResults Validate()
{
var validationResults = Validation.Validation.Validate(this);
if (string.IsNullOrEmpty(this.LastName) || this.LastName.Length > 4)
{
validationResults.AddResult(new Validation.ValidationResult("This is a test error message for a custom validation error.", this, null, null, null));
}
return validationResults;
}
}
[HasSelfValidation]
public class PersonValidator
{
[NotNullValidator(MessageTemplate = "First Name must be supplied.")]
[ContainsCharactersValidator("Rcd", ContainsCharacters.All, MessageTemplate = "{1} must contains characters \"{3}\" ({4}).")]
[StringLengthValidator(5, 50, MessageTemplate = "{1} (\"{0}\") must be between {3} ({4}) and {5} ({6}) characters in length.")]
public string FirstName { get; set; }
[NotNullValidator(MessageTemplate = "Last Name must be supplied.")]
[ContainsCharactersValidator("Wes", ContainsCharacters.All, MessageTemplate = "{1} must contains characters \"{3}\" ({4}).")]
[StringLengthValidator(5, 50, MessageTemplate = "{1} (\"{0}\") must be between {3} ({4}) and {5} ({6}) characters in length.")]
public string LastName { get; set; }
}
}
これにはかなりクールなことがあります。上記を次のように呼び出すことができます。
var validationResults = person.Validate();
しかし、基本的なチェックだけが必要な場合は、[SelfValidation] の Validate() を取り除き、属性を保持してから、次のように呼び出します。
var validationResults = Validation.Validate(person);
必要なだけの検証を含める必要があるだけで、web.config にはゼロの構成があります。
私のジブのカットはどうですか?:)
リチャード