2013-08-21 8 views
7

まず、ASP.NET MVC4アプリ、EFコードを開発します。 私は、基本クラスがあります。例えば、派生クラスの異なるDataAnnotation属性

public class Entity 
    { 
     public int Id { get; set; } 
     public string Title { get; set; } 
    } 

を、私はいくつかの派生クラスを持っている:

public class City : Entity 
{ 
    public int Population { get; set; } 
} 

そして他の多くの派生クラス(記事、トピック、など車を)。今、私は、すべてのクラスのタイトルプロパティに "必須"属性を実装したいと私は別の派生クラスの別のErrorMessagesが欲しいです。たとえば、トピッククラスでは「タイトルは空であってはいけません」、「カークラスには車名を付けてください」など。これはどのように行うことができますか?ありがとう!

答えて

11

あなたは、基本クラスにプロパティが仮想作ることができます:

public class Entity 
{ 
    public int Id { get; set; } 
    public virtual string Title { get; set; } 
} 

、その後、子クラスでそれをオーバーライドし、それを必要としますし、あなたが表示されることを希望エラーメッセージを指定:

public class City : Entity 
{ 
    public int Population { get; set; } 

    [Required(ErrorMessage = "Please name your city")] 
    public override string Title 
    { 
     get { return base.Title; } 
     set { base.Title = value; } 
    } 
} 

また、データ注釈の代わりにFluentValidation.NETを使用して検証ロジックを定義することもできます。この場合、さまざまな具体的なタイプに対して異なるバリデーターを使用できます。例:

public class CityValidator: AbstractValidator<City> 
{ 
    public CityValidator() 
    { 
     this 
      .RuleFor(x => x.Title) 
      .NotEmpty() 
      .WithMessage("Please name your city"); 
    } 
} 

public class CarValidator: AbstractValidator<Car> 
{ 
    public CityValidator() 
    { 
        this 
            .RuleFor(x => x.Title) 
            .NotEmpty() 
            .WithMessage("You should specify a name for your car"); 
    } 
} 

... 
+0

仮想/オーバーライドオプションが自分のアプリケーションに適しています。これは私が必要なものです。ありがとう! – ifeelgood

+0

基本クラスにプロパティを定義するときは、それをすべての派生クラスで使用する必要があります。 – Jowen

+0

基本クラスでプロパティを仮想にすることで、Rangeバリデータが子クラスで宣言されます。 – BrainCoder

関連する問題