2016-01-03 31 views
9

Używam Atrybut MetaDataType w mojej klasie modelu domeny. Powinien przenieść informacje o atrybutach z przywoływanej klasy do klasy, dla której ustawiono atrybut MetadataType. Ale nie działa tak jak w reklamie. Co powoduje problem tutaj?Atrybut ASP.NET Core MetaDataType nie działa

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

Odpowiedz

17

ASP.NET Rdzeń wykorzystuje

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

zamiast

System.ComponentModel.DataAnnotations.**MetadataType** 

source

Spróbuj zmienić atrybut [ModelMetadataType(typeof(ComponentModelMetaData))]

+2

najszczersze podziękowania dla F inding Microsoft.AspNetCore.Mvc.ModelMetadataTypeAttribute dla .NET Core 1.0 ... inna nazwa, inna przestrzeń nazw ... nie trudno jest znaleźć. W każdym razie jest to poprawna odpowiedź, ponieważ częściowy komponent klasy wydaje się być deklaracją modelu. Wolę używać klasy częściowej o tej samej nazwie i tej samej logicznej przestrzeni nazw, co model do zastosowania do sprawdzania poprawności i adnotacji metadanych do modelu. W ten sposób, jeśli zregeneruję model z bazy danych, nie stracę swoich edycji. – Gopher