如何:在实体类中添加验证
验证实体类是指确认输入到数据对象中的值是否符合对象架构内的约束,以及是否符合为应用程序所建立的规则的过程。在将更新发送到基础数据库之前对数据进行验证是一种很好的做法,这样可以减少错误。还可以减少应用程序和数据库之间的潜在往返行程次数。
对象关系设计器(O/R 设计器)提供了分部方法,使用户可以扩展设计器生成的代码,这些代码在插入、更新和删除完整实体期间以及在更改单个列期间及之后运行。
备注
本主题提供了使用 O/R 设计器将验证添加到实体类的基本步骤。由于不参考特定实体类将难以执行这些通用步骤,因此我们提供了一个使用实际数据的演练。有关使用 O/R 设计器配置验证的详细分步指导,请参见演练:向实体类添加验证。
添加对特定列值更改的验证
此过程演示当列中的值更改时如何验证数据。由于验证在类定义(而不是用户界面)中执行,因此如果值导致验证失败将引发异常。请为应用程序中试图更改列值的代码实现错误处理。
在列值更改过程中验证数据
在 O/R 设计器中打开或创建一个新的 LINQ to SQL 类文件(**“.dbml”文件)。(在“解决方案资源管理器”中双击该“.dbml”**文件。)
在 O/R 设计器中右击要为其添加验证的类,然后单击**“查看代码”**。
将打开代码编辑器,其中显示所选实体类的分部类。
将光标放在该分部类中。
对于 Visual Basic 项目:
展开**“方法名称”**列表。
为您要将验证添加到的列定位 OnCOLUMNNAME更改 方法。
OnCOLUMNNAMEChanging 方法将添加到部分类中。
添加下列代码,以首先确认是否已输入了值,然后确保为该列输入的值可被您的应用程序接受。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 类(而不是在特定实体类的分部类)中执行的。
在实体类更新过程中验证数据
在 O/R 设计器中打开或创建一个新的 LINQ to SQL 类文件(**“.dbml”文件)。(在“解决方案资源管理器”中双击该“.dbml”**文件。)
右击 O/R 设计器上的空白区域,然后单击**“查看代码”**。
将打开代码编辑器,其中显示 DataContext 的一个分部类。
将光标放在 DataContext 的分部类上。
对于 Visual Basic 项目:
展开**“方法名称”**列表。
单击**“更新”**ENTITYCLASSNAME。
UpdateENTITYCLASSNAME 方法将添加到部分类中。
使用 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); } }