数据生成器扩展性概述

您可以使用 Visual Studio 高级专业版或 Visual Studio 旗舰版生成有意义的数据以供测试使用。 使用内置的数据生成器,可以生成随机数据,基于现有的数据源生成数据,并对数据生成的诸多方面进行控制。 如果内置生成器的功能不够用,还可以创建自定义的数据生成器。 若要创建自定义数据生成器,请使用 Microsoft.Data.Schema.Tools.DataGenerator 命名空间中的类。

数据生成器扩展性 API

该扩展性 API 提供可供开发人员继承使用的类。 除了类之外,该 API 还包括可以应用于派生类的特性。 通过应用这些特性,一般情况下都可以减少创建自定义生成器所需的代码量。

可以通过以下三种方式使用扩展性 API 来创建自定义数据生成器:

扩展性

说明

难度

示例

声明性扩展性

容易

内置的整数数据生成器

常规扩展性

中等。 在大多数情况下建议使用此方法。

演练:创建自定义数据生成器

演练:为 CHECK 约束创建自定义数据生成器

基扩展性

  • 创建一个实现 IGenerator 接口的类。

  • 实现生成器所需的全部方法。

  • 为生成器创建一个实现 IDesigner 的自定义设计器。

  • 实现设计器所需的全部方法。

基扩展性

基扩展性 API 是数据生成引擎和数据生成计划的设计者进行交互的机制。 此 API 旨在实现以下目标:

  • 可靠性 - 在设计时引擎和运行时引擎中提升实现的一致性和可靠性。

  • 灵活性 - 支持复杂生成器,如数据绑定生成器。

基扩展性 API 中隐含的一个设计缺陷是它比更高级的声明性扩展性 API 复杂。

注册自定义数据生成器

在使用自定义数据生成器之前,必须先在自己的计算机上注册它。 如果您将自己的自定义数据生成器提供给他人使用,他们必须在自己的计算机上注册该生成器。

可以使用以下方法来注册自定义数据生成器:

方法

所需权限

示例

在 Extensions 文件夹中注册生成器。

超级用户或具有更高权限的用户

创建一个用来注册生成器的部署项目。

管理员

数据生成器、分发和设计器

您可以创建自定义数据生成器并为这些生成器创建自定义设计器, 还可以为数值数据生成器创建自定义分发并为这些分发创建自定义设计器。

  • 自定义数据生成器根据您指定的一组规则来生成随机测试数据。 对于这些生成器可以使用默认设计器,也可以通过从 DefaultGeneratorDesigner 继承来为这些生成器创建自定义设计器。 例如,正则表达式数据生成器是内置的生成器,但是它使用自定义设计器,以便可以在设计时对用户输入执行自定义验证。

  • 通过使用自定义生成器设计器,可以自定义如何从用户那里检索输入和输出属性、如何设置默认值以及如何指定验证行为。

  • 通过使用自定义分发,可以控制由数据生成器所生成的数值的分发情况。

  • 自定义分发设计器控制自定义分发的设计时行为。 此行为包括:获取要分发的输入属性名称、设置输入属性的默认值以及验证要分发的输入属性值。

数据生成器和本地化

因为 Visual Studio 具有多个语言版本,所以 Visual Studio 高级专业版和 Visual Studio 旗舰版附带的数据生成器已本地化。 您可能不必对自定义数据生成器进行本地化。 如果必须创建将本地化的数据生成器,则应创建自定义设计器。 还可以重写 GetInputs 方法来本地化输入属性的名称。

提示

如有可能,应从 DefaultGeneratorDesigner 类继承,而不是实现 IDesigner 接口,以避免额外的工作。

数据生成器实例化

自定义数据生成器可以共享数据。 共享数据的范围是生成器类型和数据库表。 对于每个数据库表,每个生成器类型都有一个唯一的实例字典。 例如,名为 Customers 的表的自定义数据生成器可以访问共享字典。 您可以将任何信息输入字典并共享该信息。 对于每个生成器类型和表,都能保证字典是同一个实例。 例如,您可以创建一个自定义数据生成器并从 GeneratorInit 中请求字典。 然后可以验证字典中是否包含共享信息。 如果是,那么您可以使用这些信息来生成数据。 也可以创建可供生成器的其他实例使用的共享信息。

提示

生成器实例化是一种高级技术, 可以使用生成器实例化来创建自定义数据生成器,用于处理各列之间的 CHECK 约束,例如,要求一个列大于另一个列的 CHECK 约束。

数据生成过程

数据生成过程发生在以下阶段:

确定设计器类型

设计时

此阶段要求将数据生成器的类型作为输入。 然后引擎可以查询 GeneratorAttribute 来检索设计器类型。 在大多数情况下,GeneratorAttribute 是从基类继承的,基类指定了默认设计器。

实例化和初始化设计器

设计时

设计器进行实例化。 设计器通过以下方法来初始化:调用 Initialize 并以参数形式传递生成器类型。

检索输入说明符

设计时

InputDescriptor 是从设计器检索的。 默认设计器通过检索数据生成器的所有标记有 InputAttribute 的属性来完成此操作。

设置默认值

设计时

设置默认值。

获取生成器输出说明

设计时

OutputDescriptor 是从设计器检索的。 默认设计器使用借助于 OutputAttribute 进行标记的属性,来创建显示在“列详细信息”窗口上“生成器输出”列中的说明。

实例化生成器

运行时

通过使用默认构造函数对数据生成器进行实例化。

设置生成器输入

运行时

所有的输入值都是在数据生成器中基于从设计器中检索的输入说明符来设置的。

验证生成器

运行时

调用 ValidateInputs 方法。 如果验证失败,则生成器将引发 InputValidationException 异常。 除数据验证异常以外的任何异常都被视为不可恢复的错误。

初始化生成器

运行时

调用 Initialize 方法。 此步骤使数据生成器能够在数据生成发生前执行任何必要的设置,如指定目标数据库的连接字符串或者为随机数生成器提供种子。 此阶段在数据生成发生之前发生一次。

运行数据生成

运行时

在此阶段,通过调用 GenerateNextValues 方法生成新结果。 可以通过使用 GetOutputValue 方法检索结果。 此方法从生成器检索标量值,该生成器与作为输入传递到生成器的输出密钥对应。 此阶段将循环访问结果,直到生成了所需的全部结果。

清理

运行时

在完成所有的数据生成之后,调用 Dispose 来清理生成器。

请参见

任务

如何:创建自定义数据生成器

演练:创建自定义数据生成器

参考

Microsoft.Data.Schema.DataGenerator

概念

用自定义数据生成器生成专用的测试数据