2013-08-21 10 views
7

Ich entwickle ASP.NET MVC4 App, EF Code zuerst. Ich habe Basisklasse:Verschiedene DataAnnotation Attribute für abgeleitete Klassen

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

und ich habe einige abgeleitete Klassen, zum Beispiel:

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

Und viele andere abgeleitete Klassen (Artikel, Thema, Auto usw.). Jetzt möchte ich "Required" Attribut zu Title-Eigenschaft in allen Klassen implementieren und ich möchte, dass es verschiedene ErrorMessages für verschiedene abgeleitete Klassen gibt. Beispiel: "Titel darf nicht leer sein" für die Topic-Klasse, "Bitte benennen Sie Ihr Auto" für die Auto-Klasse usw. Wie kann ich das tun? Vielen Dank!

Antwort

11

Sie könnten der Eigenschaft virtuelle in der Basisklasse machen:

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

und dann in der untergeordneten Klasse überschreiben, machen es erforderlich, und die Fehlermeldung an, die Sie angezeigt werden möchten:

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; } 
    } 
} 

Alternativ können Sie FluentValidation.NET anstelle von Daten Annotationen verwenden, um Ihre Validierungslogik zu definieren und in diesem Fall können Sie verschiedene Validatoren für die verschiedenen Betonarten haben. Zum Beispiel:

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

Virtual/Override-Option ist gut für meine Anwendung. Das ist das, was ich benötige. Vielen Dank! – ifeelgood

+0

Wenn Sie eine Eigenschaft in der Basisklasse definieren, sollte sie von ALLEN abgeleiteten Klassen verwendet werden. – Jowen

+0

Wenn Sie die Eigenschaft in der Basisklasse virtuell machen, wird der Bereichsvalidierer in der untergeordneten Klasse deklariert. – BrainCoder

Verwandte Themen