Adi*_*Adi 1 c# asp.net asp.net-mvc data-annotations asp.net-core
ASP.NET MVC Core 中的允许值是否有任何数据注释?由于 SQL 服务器中没有枚举,因此我无法将包含枚举字段的类迁移到数据库。我想为班级中的字段提供可能/允许的值。有没有办法做到这一点?
public class Employee
{
[Key]
public int ID { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想提供Active和Inactive作为 Status 字段的唯一可能值。
您还可以使用正则表达式来执行此操作,如下所示:
[Required]
[RegularExpression("Active|Inactive", ErrorMessage = "Invalid Status")]
public string Status { get; set; }
Run Code Online (Sandbox Code Playgroud)
正如@ps2goat 提到的,您可以对数据库使用检查约束。但是,对于进入 API 的模型,您可能仍然希望在那里提供验证。理想情况下,您将在合理范围内尽一切可能防止不良数据进入数据层。您没有提及是否使用 n 层架构,或者您的控制器是否直接引用数据模型。无论哪种方式,我相信这个自定义属性可以在 API 层或实体模型上使用。
这是一个很好的答案,解释了如何创建自定义验证属性。这是一个旧答案,但它仍然适用于 .Net Core。而这里是在对.NET核心定义验证属性的答案。它基本上是这样的:
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`);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你的模型中:
public class Employee
{
...
[EmployeeStatus("Active", "Inactive")]
public string Status { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1258 次 |
| 最近记录: |