ASP.NET中字段的允许值

问题描述 投票:0回答:1

ASP.NET MVC Core中是否为允许的值添加了数据注释?由于SQL Server中没有枚举,所以无法将带有枚举字段的类迁移到数据库。我想给类中的字段可能/允许的值。有什么办法吗?

    public class Employee
    {
        [Key]
        public int ID { get; set; }

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

        [Required]
        public string Status { get; set; }

    }

我想提供活动非活动作为“状态”字段的唯一可能值。

c# asp.net asp.net-mvc asp.net-core data-annotations
1个回答
4
投票

如@ ps2goat所述,您可以在数据库上使用检查约束。但是,对于进入API的模型,您可能仍想在此提供验证。理想情况下,您将尽其所能防止不良数据进入数据层。您没有提到是否使用n层体系结构,或者您的控制器是否直接引用数据模型。无论哪种方式,我都相信可以在API层或实体模型上使用此自定义属性。

This是一个很好的答案,它说明了如何创建自定义验证属性。这是一个旧答案,但仍然适用于.Net Core。 here是.Net Core中自定义验证属性的答案。它基本上看起来像这样:

public class EmployeeStatusAttribute : ValidationAttribute
{
    private string[] _allowedValues;

    public EmployeeStatusAttribute(string[] allowedValues)
    {
        _allowedValues = allowedValues;
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var employee = value as Employee;
        if (_allowedValues.Contains(employee.Status))
        {
            return ValidationResult.Success;
        }
        return new ValidationResult(`{employee.Status} is not a valid status`);
    }
}

然后在您的模型中:

public class Employee
{
    ...

    [EmployeeStatus("Active", "Inactive")]
    public string Status { get; set; }

    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.