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**
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
{
}