Entity Framework 核心没有带有错误消息的重复条目

Entity Framework Core no duplicate entries with ErrorMessage

使用 MVC-EFC 和 ErrorMessage 避免重复条目的最佳方法是什么 return

型号Test.cs

public class Test
{
    public int Id { get; set; }

    [Required(ErrorMessage = "Select a Name")]
    [StringLength(50, ErrorMessage = "Max 50 character")]
    public string Name { get; set; }

    [StringLength(100, ErrorMessage = "Max 100 character")]
    public string Text { get; set; }
}

我将 ApiController 与 "ErrorMessage" return 一起使用。 对于列 "Name",我不想要重复项和错误消息 return,例如 "Entry already available!" 什么是最好的方法?

尝试实现自定义 ValidationAttribute

  1. 客户ValidationAttribute

    public class UniqueValidation : ValidationAttribute
    {
    private readonly string _errorMessage;
    public UniqueValidation(string ErrorMessage)
    {
        _errorMessage = ErrorMessage;
    }
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (validationContext != null && typeof(IName).IsAssignableFrom(validationContext.ObjectType))
        {
            ApplicationDbContext db = validationContext.GetService(typeof(ApplicationDbContext)) as ApplicationDbContext;
            IQueryable<IName> result = db.GetType().GetMethod("Set").MakeGenericMethod(validationContext.ObjectType).Invoke(db, null) as IQueryable<IName>;
            var v = result.FirstOrDefault(u => u.Name == ((IName)validationContext.ObjectInstance).Name);
            if (v != null)
            {
                return new ValidationResult(_errorMessage);
            }
        }
        return ValidationResult.Success;
    }
     }
    
  2. 使用

    public class File: IName
    {
    public int Id { get; set; }
    [UniqueValidation("FileName is exist")]
    public string Name { get; set; }
    [InverseProperty("Avatar")]
    public ICollection<ApplicationUser> Users { get; set; }
    }
    
    public interface IName
     {
    string Name { get; set; }
     }