如何在C#中使用数据注释
数据批注(作为System。ComponentModel。DataAnnotations命名空间的一部分提供)是可以应用于类或类成员的属性,以指定类之间的关系,描述如何在UI中显示数据以及指定验证规则。 本文讨论数据注释,为什么有用,以及如何在我们的.NET Core应用程序中使用它们。
若要使用本文提供的代码示例,您应该在系统中安装Visual Studio 2019。 如果您还没有副本,则可以在此处下载Visual Studio 2019 。
[ 同样在InfoWorld上:隔离期间最好的免费编程课程 ]
在Visual Studio 2019中创建控制台应用程序项目
首先,让我们在Visual Studio中创建一个.NET Core Console Application项目。 假设系统中已安装Visual Studio 2019,请按照以下概述的步骤在Visual Studio中创建新的.NET Core控制台应用程序项目。
- 启动Visual Studio IDE。
- 点击“创建新项目”。
- 在“创建新项目”窗口中,从显示的模板列表中选择“控制台应用程序(.NET Core)”。
- 点击下一步。
- 在接下来显示的“配置新项目”窗口中,指定新项目的名称和位置。
- 单击创建。
这将在Visual Studio 2019中创建一个新的.NET Core控制台应用程序项目。在本文的后续部分中,我们将使用该项目来处理数据注释。
包括系统。 ComponentModel。 DataAnnotations名称空间
要使用本文给出的代码示例,您应该包括系统。 ComponentModel。 程序中的DataAnnotations命名空间。
请注意,属性用于指定类或属性上的元数据。 数据注释属性可以大致分为以下几类:
- 验证属性-用于对实体的属性实施验证规则
- 显示属性-用于指定应如何在用户界面中显示数据
- 建模属性-用于指定类之间存在的关系
C#中的数据注释属性类
System.ComponentModel.Annotations命名空间包含几个属性类,这些属性类可用于为您的实体类或数据控件定义元数据。 最常用的属性包括:
- 并发检查
- 键
- 最长长度
- 需要
- 字符串长度
- 时间戳记
C#中的数据注释示例
在我们之前创建的控制台应用程序中的Author.cs文件中创建以下类。
public class Author
{
[Required(ErrorMessage = "{0} is required")]
[StringLength(50, MinimumLength = 3,
ErrorMessage = "First Name should be minimum 3 characters and a maximum of 50 characters")]
[DataType(DataType.Text)]
public string FirstName { get; set; }
[Required(ErrorMessage = "{0} is required")]
[StringLength(50, MinimumLength = 3,
ErrorMessage = "Last Name should be minimum 3 characters and a maximum of 50 characters")]
[DataType(DataType.Text)]
public string LastName { get; set; }
[DataType(DataType.PhoneNumber)]
[Phone]
public string PhoneNumber { get; set; }
[DataType(DataType.EmailAddress)]
[EmailAddress]
public string Email { get; set; }
}
下面的代码段说明了如何创建Author类的实例并为其属性分配值。
Author author = new Author();
author.FirstName = "Joydip";
author.LastName = "";
author.PhoneNumber = "1234567890";
author.Email = "joydipkanjilal@yahoo.com";
您可以在Program.cs文件的Main方法中编写以下代码片段以验证模型。
ValidationContext context = new ValidationContext(author, null, null);
List<ValidationResult> validationResults = new List<ValidationResult>();
bool valid = Validator.TryValidateObject(author, context, validationResults, true);
if (!valid)
{
foreach (ValidationResult validationResult in validationResults)
{
Console.WriteLine("{0}", validationResult.ErrorMessage);
}
}
ValidationContext是为您提供进行验证的上下文的类。 如果验证成功,则Validator类的TryValidateObject静态方法返回true,否则返回false。 它还返回ValidationResults的列表,其中详细列出了在模型上失败的所有验证。 最后,我们使用了foreach循环来迭代ValidationResults列表,并在控制台窗口中显示错误消息。
下面给出了完整的代码清单,供您参考。
public class Author
{
[Required(ErrorMessage = "{0} is required")]
[StringLength(50, MinimumLength = 3,
ErrorMessage = "First Name should be minimum 3 characters and a maximum of 50 characters")]
[DataType(DataType.Text)]
public string FirstName { get; set; }
[Required(ErrorMessage = "{0} is required")]
[StringLength(50, MinimumLength = 3,
ErrorMessage = "Last Name should be minimum 3 characters and a maximum of 50 characters")]
[DataType(DataType.Text)]
public string LastName { get; set; }
[DataType(DataType.PhoneNumber)]
[Phone]
public string PhoneNumber { get; set; }
[DataType(DataType.EmailAddress)]
[EmailAddress]
public string Email { get; set; }
}
class Program
{
static void Main(string[] args)
{
Author author = new Author();
author.FirstName = "Joydip";
author.LastName = ""; //No value entered
author.PhoneNumber = "1234567890";
author.Email = "joydipkanjilal@yahoo.com";
ValidationContext context = new ValidationContext
(author, null, null);
List<ValidationResult> validationResults = new
List<ValidationResult>();
bool valid = Validator.TryValidateObject
(author, context, validationResults, true);
if (!valid)
{
foreach (ValidationResult validationResult in
validationResults)
{
Console.WriteLine("{0}",
validationResult.ErrorMessage);
}
}
Console.ReadKey();
}
}
执行程序时,您应该在控制台窗口中看到以下错误消息:
LastName is required
在C#中创建自定义验证属性
要创建自定义验证属性类,您应该扩展ValidationAttribute基类并覆盖IsValid方法,如下面给出的代码片段所示。
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public class IsEmptyAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var inputValue = value as string;
return !string.IsNullOrEmpty(inputValue);
}
}
下面的代码段说明了如何使用定制属性来装饰Author类的FirstName和LastName属性。
[IsEmpty(ErrorMessage = "Should not be null or empty.")]
public string FirstName { get; set; }
[IsEmpty(ErrorMessage = "Should not be null or empty.")]
public string LastName { get; set; }
数据注释最初是在.NET 3.5中作为系统的一部分引入的。 ComponentModel。 DataAnnotations命名空间。 从那时起,它们已成为.NET中广泛使用的功能。 您可以利用数据注释在一个地方定义数据验证规则,从而避免一次又一次地重写相同的验证代码。
在以后的文章中,我们将研究如何在ASP.NET Core MVC应用程序中使用数据注释来执行模型验证。
如何在C#中做更多
- 何时在C#中使用抽象类与接口
- 如何在C#中使用AutoMapper
- 如何在C#中使用Lambda表达式
- 如何在C#中与Action,Func和Predicate委托一起使用
- 如何在C#中与委托人一起工作
- 如何在C#中实现一个简单的记录器
- 如何在C#中使用属性
- 如何在C#中使用log4net
- 如何在C#中实现存储库设计模式
- 如何在C#中使用反射
- 如何在C#中使用FileSystemWatcher
- 如何在C#中执行延迟初始化
- 如何在C#中使用MSMQ
- 如何在C#中使用扩展方法
- 如何在C#中使用Lambda表达式
- 何时在C#中使用volatile关键字
- 如何在C#中使用yield关键字
- 如何在C#中实现多态
- 如何在C#中构建自己的任务计划程序
- 如何在C#中使用RabbitMQ
- 如何在C#中使用元组
- 探索C#中的虚拟和抽象方法
翻译自: https://www.infoworld.com/article/3543302/how-to-use-data-annotations-in-csharp.html