web-dev-qa-db-fra.com

L'attribut MetaDataType ASP.NET Core ne fonctionne pas

J'utilise l'attribut MetaDataType sur ma classe de modèle de domaine. Il est supposé déplacer les informations d'attribut de la classe référencée dans la classe où l'attribut MetadataType a été défini. Mais cela ne fait pas comme annoncé. Quelle est la cause du problème ici?

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

ASP.NET Core utilise

Microsoft.AspNetCore.Mvc **ModelMetadataType** 

au lieu de

System.ComponentModel.DataAnnotations.**MetadataType** 

source

Essayez de changer votre attribut en [ModelMetadataType(typeof(ComponentModelMetaData))]

38
Guilherme Duarte

Une autre façon ... utiliser le même espace de noms

public class ApirolesMetaData
{
    [Required]
    public string Name { get; set; }
}


[ModelMetadataType(typeof(ApirolesMetaData))]
public partial class Apiroles
{

}
2
ashimaz

C'est ainsi que j'ai résolu le même problème, j'espère que cela résoudra votre problème.

Classe d'entité:

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

Métadonnées:

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

Bonne chance...

1
Javier Contreras