c# asp.net-core data-annotations

c# - ASP.NET Core MetaDataType Attribute no funciona



asp.net-core data-annotations (3)

Estoy usando el atributo MetaDataType en mi clase de modelo de dominio. Se supone que mueve la información del atributo de la clase referenciada a la clase que se ha establecido el atributo MetadataType. Pero no funciona como se anuncia. ¿Qué está causando el problema aquí?

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


ASP.NET Core utiliza

Microsoft.AspNetCore.Mvc **ModelMetadataType**

en vez de

System.ComponentModel.DataAnnotations.**MetadataType**

source

Intente cambiar su atributo a [ModelMetadataType(typeof(ComponentModelMetaData))]


Así es como resolví el mismo problema, espero que esto resuelva tu problema.

Clase de entidad:

namespace CoreProject.Persistence.EFCore { public partial class User { public User() { Reader = new HashSet<Reader>(); Writer = new HashSet<Writer>(); } public int UserId { get; set; } public string Email { get; set; } public string Password { get; set; } public string PasswordHashKey { get; set; } public byte Role { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime CreatedUtc { get; set; } public DateTime LastUpdateUtc { get; set; } public byte Status { get; set; } public bool Deleted { get; set; } public DateTime? ActivatedUtc { get; set; } public bool Test { get; set; } public virtual ICollection<Reader> Reader { get; set; } public virtual ICollection<Writer> Writer { get; set; } } }

Metadatos

namespace CoreProject.Persistence.EFCore { [ModelMetadataType(typeof(IUserMetadata))] public partial class User : IUserMetadata { public string FullName => FirstName + " " + LastName; } public interface IUserMetadata { [JsonProperty(PropertyName = "Id")] int UserId { get; set; } [JsonIgnore] string Password { get; set; } [JsonIgnore] string PasswordHashKey { get; set; } [JsonIgnore] byte Role { get; set; } } }

Buena suerte...


Otra forma ... usa el mismo espacio de nombres

public class ApirolesMetaData { [Required] public string Name { get; set; } } [ModelMetadataType(typeof(ApirolesMetaData))] public partial class Apiroles { }