更新:2007 年 11 月
数据生成器的抽象基类。
命名空间: Microsoft.VisualStudio.TeamSystem.Data.DataGenerator
程序集: Microsoft.VisualStudio.TeamSystem.Data(在 Microsoft.VisualStudio.TeamSystem.Data.dll 中)
语法
声明
<GeneratorAttribute(GetType(DefaultGeneratorDesigner))> _
<CLSCompliantAttribute(True)> _
Public MustInherit Class Generator _
Implements IGenerator, IDisposable
用法
Dim instance As Generator
[GeneratorAttribute(typeof(DefaultGeneratorDesigner))]
[CLSCompliantAttribute(true)]
public abstract class Generator : IGenerator,
IDisposable
[GeneratorAttribute(typeof(DefaultGeneratorDesigner))]
[CLSCompliantAttribute(true)]
public ref class Generator abstract : IGenerator,
IDisposable
public abstract class Generator implements IGenerator, IDisposable
备注
如果标准数据生成器不能满足需要,您可以创建自定义数据生成器。若要创建自定义数据生成器,必须创建一个实现 IGenerator 的类或从 Generator 继承的类。您可以通过使用 GeneratorAttribute 修饰该类来将其标识为数据生成器。
您可以为自定义数据生成器创建自定义设计器,也可以使用 DefaultGeneratorDesigner。
基类实现构造基于标记为 OutputAttribute 的公共属性的输出。输入是使用 InputAttribute 设置的。使用通过属性 (Attribute) 标记的属性 (Property) 可提供一个用于声明强类型输入和输出值的简单机制。
示例
标准数据生成器无法生成满足某些 CHECK 约束的数据。例如,如果某一 CHECK 约束要求日期位于两个不同范围中的一个范围内,则您无法使用标准 DateTime 生成器。此示例创建一个能够满足类似约束的自定义数据生成器。该生成器接受两个不同的范围作为其输入,并生成一个位于其中一个范围内的随机日期。有关更多信息,请参见演练:为 CHECK 约束创建自定义数据生成器。
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.VisualStudio.TeamSystem.Data.DataGenerator;
namespace GeneratorDateRangesCS
{
public class GeneratorDateRangesCS : Generator
{
DateTime mRange1Min;
DateTime mRange1Max;
DateTime mRange2Min;
DateTime mRange2Max;
[Input]
public DateTime Range1Min
{
set {mRange1Min = value;}
}
[Input]
public DateTime Range1Max
{
set {mRange1Max = value;}
}
[Input]
public DateTime Range2Min
{
set {mRange2Min = value;}
}
[Input]
public DateTime Range2Max
{
set {mRange2Max = value;}
}
DateTime mRandomDate;
[Output]
public DateTime RandomDate
{
get {return mRandomDate;}
}
Random mRandom;
Random mRandomRange;
protected override void OnInitialize(GeneratorInit initInfo)
{
mRandom = new Random(this.Seed); //deterministic
mRandomRange = new Random(this.Seed); //deterministic
//mRandom = new Random(); //non-deterministic
//mRandomRange = new Random(); //non-deterministic
base.OnInitialize(initInfo);
}
protected override void OnGenerateNextValues()
{
DateTime min;
DateTime max;
//Generate a random date from either range 1 or range 2.
//Randomly select either range 1 or range 2 by randomly
//generating an odd or an even random number.
//------------------------------------------------------------
if (mRandomRange.Next() % 2 == 0) //check for odd or even
{
min = mRange1Min;
max = mRange1Max;
}
else
{
min = mRange2Min;
max = mRange2Max;
}
//The formula for creating a random number in a specific range is:
//start of range + (size of range * random number between 0 and 1)
//size of range
TimeSpan range = max - min;
//(size of range * random number between 0 and 1)
TimeSpan randomNumber = new TimeSpan((long)(range.Ticks * mRandom.NextDouble()));
//start of range + (size of range * random number between 0 and 1)
mRandomDate = min + randomNumber;
}
}//end class
}//end namespace
Imports Microsoft.VisualStudio.TeamSystem.Data.DataGenerator
Public Class GeneratorDateRangesVB
Inherits Generator
Dim mRange1Min As Date
Dim mRange1Max As Date
Dim mRange2Min As Date
Dim mRange2Max As Date
<Input()> _
Public WriteOnly Property Range1Min() As Date
Set(ByVal value As Date)
mRange1Min = value
End Set
End Property
<Input()> _
Public WriteOnly Property Range1Max() As Date
Set(ByVal value As Date)
mRange1Max = value
End Set
End Property
<Input()> _
Public WriteOnly Property Range2Min() As Date
Set(ByVal value As Date)
mRange2Min = value
End Set
End Property
<Input()> _
Public WriteOnly Property Range2Max() As Date
Set(ByVal value As Date)
mRange2Max = value
End Set
End Property
Dim mRandomDate As Date
<Output()> _
Public ReadOnly Property RandomDate() As Date
Get
Return mRandomDate
End Get
End Property
Dim mRandom As Random
Dim mRandomRange As Random
Protected Overrides Sub OnInitialize(ByVal initInfo As GeneratorInit)
mRandom = New Random(Me.Seed) 'deterministic
mRandomRange = New Random(Me.Seed) 'deterministic
'mRandom = New Random() 'non-deterministic
'mRandomRange = New Random() 'non-deterministic
MyBase.OnInitialize(initInfo)
End Sub
Protected Overrides Sub OnGenerateNextValues()
Dim min As Date
Dim max As Date
'Generate a random date from either range 1 or range 2.
'Randomly select either range 1 or range 2 by randomly
'generating an odd or an even random number.
'------------------------------------------------------------
If mRandomRange.Next() Mod 2 = 0 Then 'check for odd or even
min = mRange1Min
max = mRange1Max
Else
min = mRange2Min
max = mRange2Max
End If
'The formula for creating a random number in a specific range is:
'start of range + (size of range * random number between 0 and 1)
'size of range
Dim range As TimeSpan = max - min
'(size of range * random number between 0 and 1)
Dim randomNumber As TimeSpan = New TimeSpan(CLng(range.Ticks * mRandom.NextDouble()))
'start of range + (size of range * random number between 0 and 1)
mRandomDate = min + randomNumber
End Sub
End Class
继承层次结构
System.Object
Microsoft.VisualStudio.TeamSystem.Data.DataGenerator.Generator
Microsoft.VisualStudio.TeamSystem.Data.Generators.Bit
Microsoft.VisualStudio.TeamSystem.Data.Generators.DatabaseDateTime
Microsoft.VisualStudio.TeamSystem.Data.Generators.DatabaseGuid
Microsoft.VisualStudio.TeamSystem.Data.Generators.DataBoundGenerator
Microsoft.VisualStudio.TeamSystem.Data.Generators.Image
Microsoft.VisualStudio.TeamSystem.Data.Generators.Numeric<T>
Microsoft.VisualStudio.TeamSystem.Data.Generators.RegexString
Microsoft.VisualStudio.TeamSystem.Data.Generators.VarBinary
线程安全
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。
另请参见
参考
Microsoft.VisualStudio.TeamSystem.Data.DataGenerator 命名空间