如何在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控制台应用程序项目。

  1. 启动Visual Studio IDE。
  2. 点击“创建新项目”。
  3. 在“创建新项目”窗口中,从显示的模板列表中选择“控制台应用程序(.NET Core)”。
  4. 点击下一步。
  5. 在接下来显示的“配置新项目”窗口中,指定新项目的名称和位置。
  6. 单击创建。

这将在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#中做更多

翻译自: https://www.infoworld.com/article/3543302/how-to-use-data-annotations-in-csharp.html