自定义数据生成器的注意事项
可通过创建自定义数据生成器来扩展 Visual Studio 的数据生成功能。 如果存在标准数据生成器无法满足的业务规则,则可以创建自定义数据生成器。 有关更多信息,请参见使用数据生成器生成数据库的测试数据。
在创建自定义数据生成器之前,应考虑以下问题。
数据生成器的命名
创建自定义数据生成器时,可以控制将在此自定义数据生成器的用户界面中显示的名称。 应避免为多个数据生成器指定相同的名称。 还应避免为生成器指定与任何内置数据生成器相同的名称。
使用声明性 API 时的命名
如果未声明要与自定义数据生成器一起使用的设计器,则在创建 DefaultDistributionDesigner 时此自定义数据生成器的类名将显示为显示名称。
若要为此自定义数据生成器指定将在其用户界面上显示的名称,可以将以下特性应用到您的自定义数据生成器类:
[System.ComponentModel.DisplayName("YourGeneratorName")]
使用基本 API 时的命名
如果创建自定义设计器,则由该设计器的 Name 属性返回的值将显示在自定义数据生成器的用户界面中。 如果自定义设计器是从 DefaultGeneratorDesigner 派生的,则将使用 DisplayName 特性。 如果改为从 IGeneratorDesigner 派生自定义设计器,则忽略 DisplayName 特性。
若要为数据生成器指定 DisplayName 特性,必须将以下特性添加到数据生成器类中:
[System.ComponentModel.DisplayName("YourGeneratorName")]
将自定义数据生成器指定为某一 SQL 数据类型的默认数据生成器
可以分配自定义数据生成器作为某个 SQL 数据类型的默认数据生成器。 有关更多信息,请参见如何:更改列类型的默认生成器。
在将自定义生成器分配为某个 SQL 数据类型的默认生成器时,将适用于以下限制:
可以将自定义数据生成器指定给不会有唯一约束的任何 SQL 数据类型。 例如,可以将自定义数据生成器指定给 Image 数据类型。
可以将不具有筛选器特性的自定义数据生成器分配给任何 SQL 数据类型。
仅当具有筛选器特性的自定义数据生成器可以产生唯一值时,才可以将该生成器分配给会有唯一约束的 SQL 数据类型。 若要指定这种类型的生成器,请将以下特性应用于自定义数据生成器类:
<GeneratorStyles(DesignerStyles:=GeneratorDesignerStyles.CanProduceUniqueValues)> _ Public Class TestGenerator Inherits Generator End Class
[GeneratorStyles(DesignerStyles = GeneratorDesignerStyles.CanProduceUniqueValues)] public class TestGenerator:Generator { }
自定义设计器
默认情况下,自定义数据生成器将使用默认设计器。
如果希望将自定义设计器与自定义数据生成器一起使用,则必须针对自定义数据生成器类指定另一个特性:
<Generator(GetType(CustomDesignerType))> _
Public Class TestGenerator
Inherits Generator
End Class
[Generator(typeof(CustomDesignerType))]
public class TestGenerator:Generator
{
}
自动分配的输入属性
如果使用 AutoAssignedInput 特性来标记自定义数据生成器的一个或多个输入属性,则还应使这些属性成为只读的。 具有自动分配的输入的属性需要具有 setter,但它的 InputDescriptor 的 ReadOnly 属性应设置为 true。
当您打开数据生成计划时,大多数标记为自动分配的属性的值都会重置。 例如,标记为自动分配的 Collation、Data Type、MaxLength、Nullable 和 RowsToGenerate 属性将全部重置。 相比之下,标记为自动分配的 Unique、Seed 和 PercentageNull 属性将不会重置。
通过使将重置其值的属性成为只读的,有助于避免自定义数据生成器的用户出现困惑。