更新:2007 年 11 月
在开发数据库架构时,可以通过用尽可能精确地表示生产数据的数据填充测试数据库来更加有效地测试所建议的更改。与内置的数据生成器相比,自定义数据生成器提供能够更准确地满足您的规范的测试数据。例如,可以创建一个生成器,以便用所指定列表中的随机名称或者用所指定范围中的数字来填充表列。有关更多信息,请参见生成数据概述。
在本演练中,您将创建一个自定义生成器,该生成器生成介于零和生成器用户所指定的上限之间的随机整数。在本演练中,您将执行下列任务:
- 创建从 Generator 继承的类。 
- 创建一个输入属性来指定要生成的数据的上限。 
- 创建要用作生成器输出的输出属性。 
- 重写 OnGenerateNextValues 方法以生成数据。 
有关在创建自定义数据生成器之前应当考虑的安全问题的信息,请参见数据生成器的安全性。
先决条件
若要完成此演练,需要以下组件:
- Visual Studio Team Edition for Database Professionals
创建自定义生成器
- 创建一个类库项目,然后将它命名为 TestGenerator。 
- 在“解决方案资源管理器”中右击项目,再单击“添加引用”。 - 随即出现“添加引用”对话框。 
- 单击“.NET”选项卡。 
- 在“组件名称”列表中,单击“Microsoft.VisualStudio.TeamSystem.Data”,再单击“确定”。 
- (可选,仅限 Visual Basic)在“解决方案资源管理器”中,单击“显示所有文件”,再展开“引用”节点以验证新引用。 
- 在“代码”窗口顶部的类声明之前,添加下面的代码行: - Imports Microsoft.VisualStudio.TeamSystem.Data.DataGenerator- using Microsoft.VisualStudio.TeamSystem.Data.DataGenerator;
- 将 Class1 类重命名为 TestGenerator。 .gif) 警告: 警告:- 默认情况下,为该类指定的名称将显示在“列详细信息”窗口上“生成器”列中的列表中。所指定的名称不应当与内置生成器或其他自定义生成器的名称冲突。 - Public Class TestGenerator End Class- public class TestGenerator { }
- 指定从 Generator 继承类,如下面的示例所示: - Public Class TestGenerator Inherits Generator End Class- public class TestGenerator: Generator { }
- 在“文件”菜单上,单击“全部保存”。 
将输入和输出属性添加到生成器中
在上一节中,您创建了一个从 Generator 类继承的类。在本节中,将向该类中添加输入和输出属性。输入属性在设计时出现在“属性”窗口中,您可以使用它们来配置生成器。输出属性包含用来生成数据的值。输出属性还指示此生成器可以生成的数据类型。
添加输入和输出属性
- 创建一个名为 mLimit 的成员变量,如下面的示例所示: - Dim limitValue As Integer- int limitValue;
- 创建一个名为 Limit 的属性,该属性设置和返回成员变量 mLimit,如下面的示例所示: - Public Property Limit() As Integer Set(ByVal value As Integer) limitValue = value End Set Get Return limitValue End Get End Property- public int Limit { // The get is optional for input properties set {limitValue = value;} get {return limitValue;} }
- 将 InputAttribute 添加到 Limit 属性中,如下面的示例所示: - <Input(Name:="Limit", Description:="The upper limit of the data that is generated.")> _ Public Property Limit() As Integer- [Input(Name="Limit", Description="The upper limit of the data that is generated.")] public int Limit
- 创建一个名为 mRandom 的成员变量,如下面的示例所示: - Dim randomValue As Integer- int randomValue;
- 创建一个名为 RandomNumber 的只读属性,该属性返回成员变量 mRandom,如下面的示例所示: - Public ReadOnly Property RandomNumber() As Integer Get Return randomValue End Get End Property- public int RandomNumber { get {return randomValue;} }
- 将 OutputAttribute 添加到 RandomNumber 属性中,如下面的示例所示: - <Output()> _ Public ReadOnly Property RandomNumber() As Integer- [Output] public int RandomNumber
- 在“文件”菜单上,单击“全部保存”。 
重写 OnGenerateNextValues 方法
Visual Studio Team Edition for Database Professionals 为它需要的每组值调用每个生成器的 OnGenerateNextValues 方法。创建数据生成器时,应重写此方法以提供为每个输出属性生成值的逻辑。
重写 OnGenerateNextValues 方法
- 创建一个作为 Random 类的实例的成员变量,如下面的示例所示: - Dim random As New Random- Random random = new Random();.gif) 说明: 说明:- 此步骤会创建一个非确定性的数据生成器。若要创建确定性的数据生成器,请将 Seed 作为一个参数传递给 Random 构造函数。 
- 重写 OnGenerateNextValues 方法,如下面的示例所示: - Protected Overrides Sub OnGenerateNextValues() randomValue = CInt(random.NextDouble * Limit) End Sub- protected override void OnGenerateNextValues() { randomValue = (int)(random.NextDouble() * Limit); }
- 在“文件”菜单上,单击“全部保存”。 
对生成器进行签名
您必须使用强名称对所有的自定义数据生成器进行签名才能注册它们。
使用强名称对生成器进行签名
- 在“项目”菜单上单击“TestGenerator 属性”。 
- 在“签名”选项卡上,选中“为程序集签名”复选框。 
- 在“选择强名称密钥文件”框中,单击“<新建...>”。 
- 在“密钥文件名称”框中键入“TestGeneratorKey”。 
- 键入并确认密码,再单击“确定”。 - 在生成解决方案时,将使用密钥文件对程序集进行签名。 
- 在“文件”菜单上,单击“全部保存”。 
- 在“生成”菜单上,单击“生成解决方案”。 - 现在已经创建了一个自定义数据生成器。 
后续步骤
既然已经生成了数据生成器,接下来必须在自己的计算机上注册该生成器才能使用它。您可以按照演练:注册自定义数据生成器中的说明手动注册数据生成器,也可以生成一个用来自动注册数据生成器的部署项目。
请参见
任务
概念
参考
Microsoft.VisualStudio.TeamSystem.Data.DataGenerator