向实体类添加验证

注释

此类 DataSet 和相关类是 2000 年代初的旧版 .NET Framework 技术,使应用程序能够在应用与数据库断开连接时处理内存中的数据。 这些技术对于使用户能够修改数据并将更改保留回数据库的应用特别有用。 尽管数据集是经过证实的成功技术,但新 .NET 应用程序的建议方法是使用 Entity Framework Core。 Entity Framework 提供了一种更自然的方式来将表格数据用作对象模型,并且具有更简单的编程接口。

验证 实体类是确认输入到数据对象中的值符合对象架构中的约束以及为应用程序建立的规则的过程。 在向基础数据库发送更新之前验证数据是一种可减少错误的良好做法。 它还减少了应用程序与数据库之间的往返次数。

Visual Studio 中的 LINQ to SQL 工具提供分部方法,使用户能够扩展在插入、更新和删除完整实体期间以及单个列更改期间和之后运行的设计器生成的代码。

注释

本主题提供使用 O/R 设计器向实体类添加验证的基本步骤。 由于在不使用特定实体类的情况下可能很难遵循这些通用步骤,因此提供了使用实际数据的演练。

为特定列中值的更改添加验证

此过程演示如何在列中的值更改时验证数据。 由于验证是在类定义(而不是用户界面中)内执行的,因此如果值导致验证失败,则会引发异常。 为应用程序中尝试更改列值的代码实现错误处理。

注释

本文中的说明说明了 Visual Studio 中提供的交互式开发体验(IDE)的最新版本。 您的计算机可能会显示某些用户界面元素的不同名称或位置。 你可能使用的是不同版本的 Visual Studio 或不同的环境设置。 有关详细信息,请参阅个性化设置 IDE

在列值更改时验证数据

  1. O/R 设计器中打开或创建新的 LINQ to SQL 类文件(.dbml文件)。 (双击.dbml解决方案资源管理器中的文件。

  2. O/R 设计器中,右键单击要为其添加验证的类,然后选择“ 查看代码”。

    代码编辑器将打开,显示与所选实体类相关的分部类。

  3. 将光标放在该分部类中。

  4. 对于 Visual Basic 项目:

    1. 展开 方法名称 列表。

    2. 找到要向其添加验证的列的 OnCOLUMNNAMEChanging 方法。

    3. OnCOLUMNNAMEChanging 方法已被添加到分部类中。

    4. 添加以下代码以首先验证是否已输入值,然后确保为列输入的值对于应用程序是可接受的。 该 value 参数包含建议的值,因此请添加逻辑来确认它是有效值:

      If value.HasValue Then
          ' Add code to ensure that the value is acceptable.
          ' If value < 1 Then
          '    Throw New Exception("Invalid data!")
          ' End If
      End If
      

    对于 C# 项目:

    由于 C# 项目不会自动生成事件处理程序,因此可以使用 IntelliSense 创建更改列的部分方法。 键入 partial 和空格以访问可用分部方法的列表。 单击要为其添加验证的列的列更改方法。 选择列更改分部方法时生成的代码与下面的代码类似:

    partial void OnCOLUMNNAMEChanging(COLUMNDATATYPE value)
        {
           throw new System.NotImplementedException();
        }
    

向实体类添加更新验证

除了在更改期间检查值之外,还可以在尝试更新完整的实体类时验证数据。 尝试更新期间的验证使你可以比较多个列中的值(如果业务规则需要这样做)。 以下过程演示如何验证何时尝试更新完整的实体类。

注释

完整实体类更新的验证代码在分部 DataContext 类中执行(而不是在特定实体类的分部类中)。

在对实体类进行更新时验证数据

  1. O/R 设计器中打开或创建新的 LINQ to SQL 类文件(.dbml文件)。 (双击.dbml解决方案资源管理器中的文件。

  2. 右键单击 O/R 设计器 上的空区域,然后单击“ 查看代码”。

    将打开代码编辑器,其中显示 DataContext 的一个分部类。

  3. 将光标置于 DataContext 的分部类中。

  4. 对于 Visual Basic 项目:

    1. 展开 方法名称 列表。

    2. 单击 UpdateENTITYCLASSNAME

    3. UpdateENTITYCLASSNAME 方法已被添加到分部类中。

    4. 使用 instance 参数访问单个列值,如以下代码所示:

      If (instance.COLUMNNAME = x) And (instance.COLUMNNAME = y) Then
          Dim ErrorMessage As String = "Invalid data!"
          Throw New Exception(ErrorMessage)
      End If
      

    对于 C# 项目:

    由于 C# 项目不会自动生成事件处理程序,因此可以使用 IntelliSense 创建分部 UpdateCLASSNAME 方法。 键入 partial 和空格以访问可用分部方法的列表。 单击要添加验证的类的更新方法。 以下代码类似于选择 UpdateCLASSNAME 分部方法时生成的代码:

    partial void UpdateCLASSNAME(CLASSNAME instance)
    {
        if ((instance.COLUMNNAME == x) && (instance.COLUMNNAME = y))
        {
            string ErrorMessage = "Invalid data!";
            throw new System.Exception(ErrorMessage);
        }
    }