2016-01-03 7 views
9

Ich verwende das MetaDataType-Attribut für meine Domänenmodellklasse. Es sollte die Attributinformationen aus der referenzierten Klasse in die Klasse verschieben, für die das MetadataType-Attribut festgelegt wurde. Aber es funktioniert nicht wie angekündigt. Was verursacht das Problem hier?ASP.NET Core MetaDataType Attribut funktioniert nicht

[MetadataType(typeof(ComponentModelMetaData))] 
public partial class Component 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public ICollection<Repo> Repos { get; set; } 
    public string Description { get; set; } 
} 


public class ComponentModelMetaData 
{ 
    [Required(ErrorMessage = "Name is required.")] 
    [StringLength(30, MinimumLength = 3, ErrorMessage = "Name length should be more than 3 symbols.")] 
    public string Name { get; set; } 
    public ICollection<Repo> Repos { get; set; } 
    [Required(ErrorMessage = "Description is required.")] 
    public string Description { get; set; }   
} 

Antwort

17

ASP.NET-Core verwendet

Microsoft.AspNetCore.Mvc.Core.**ModelMetadataType** 

statt

System.ComponentModel.DataAnnotations.**MetadataType** 

source

Versuchen Sie Ihr Attribut [ModelMetadataType(typeof(ComponentModelMetaData))]

+2

Mein tiefster Dank für f Ändern inding Microsoft.AspNetCore.Mvc.ModelMetadataTypeAttribute für .NET Core 1.0 ... anderer Name, anderer Namensraum ... nicht schwer zu finden. Wie auch immer, dies ist die richtige Antwort, da die partielle Klassenkomponente die Modelldeklaration zu sein scheint. Ich bevorzuge die Verwendung einer partiellen Klasse, die denselben Namen und denselben logischen Namespace wie das Modell hat, um Validate und die Anmerkungen der Metadaten auf das Modell anzuwenden. Wenn ich das Modell aus der Datenbank neu generiere, verliere ich meine Änderungen nicht. – Gopher