Generator クラス
データ ジェネレーターの抽象基本クラスを表します。
継承階層
System.Object
Microsoft.Data.Schema.Tools.DataGenerator.Generator
名前空間: Microsoft.Data.Schema.Tools.DataGenerator
アセンブリ: Microsoft.Data.Schema.Tools (Microsoft.Data.Schema.Tools.dll 内)
構文
'宣言
<GeneratorAttribute(GetType(DefaultGeneratorDesigner))> _
<CLSCompliantAttribute(True)> _
Public MustInherit Class Generator _
Implements IGenerator, IDisposable, IExtensionInformation, IExtension
[GeneratorAttribute(typeof(DefaultGeneratorDesigner))]
[CLSCompliantAttribute(true)]
public abstract class Generator : IGenerator,
IDisposable, IExtensionInformation, IExtension
[GeneratorAttribute(typeof(DefaultGeneratorDesigner))]
[CLSCompliantAttribute(true)]
public ref class Generator abstract : IGenerator,
IDisposable, IExtensionInformation, IExtension
[<AbstractClass>]
[<GeneratorAttribute(typeof(DefaultGeneratorDesigner))>]
[<CLSCompliantAttribute(true)>]
type Generator =
class
interface IGenerator
interface IDisposable
interface IExtensionInformation
interface IExtension
end
public abstract class Generator implements IGenerator, IDisposable, IExtensionInformation, IExtension
Generator 型で公開されるメンバーは以下のとおりです。
コンストラクター
名前 | 説明 | |
---|---|---|
Generator | Generator クラスを初期化するために、派生クラスのコンストラクターから呼び出されます。 |
このページのトップへ
プロパティ
名前 | 説明 | |
---|---|---|
Collation | この列の照合順序または使用言語に合わせた並べ替えを取得または設定します。 | |
Column | 列を取得または設定します。 | |
ColumnName | 列名を取得または設定します。 | |
Constraints | 列の CHECK 制約情報を取得または設定します。 | |
DefaultLocaleId | ロケール ID を取得または設定します。 | |
DefaultValue | 列の既定値を取得または設定します。 | |
ExtensionHandle | 拡張機能のハンドルを取得します。 | |
MaxLength | この列の値の最大長を取得または設定します。 | |
Nullable | この列を nullnull 参照 (Visual Basic では Nothing) に設定できるかどうかを示す値を取得または設定します。 | |
OutputKey | 出力値を取得するためのキーを取得または設定します。 | |
PercentageNull | この列の生成値をユーザーが nullnull 参照 (Visual Basic では Nothing) に設定する割合を取得または設定します。この割合は、0 から 100 までの整数値で表されます。 | |
Precision | データの精度を取得または設定します。 | |
RowsToInsert | 生成する行数を取得または設定します。 | |
Scale | データの小数点以下の桁数を取得または設定します。 | |
SchemaName | 列が属しているスキーマの名前を取得または設定します。 | |
Seed | シードを取得または設定します。シードを使って、確定的なランダム データ生成アルゴリズムを初期化できます。 | |
TableName | 列が属しているテーブルの名前を取得または設定します。 | |
TargetType | 列の対象のデータ型を取得または設定します。 | |
Unique | 生成対象の列が、UNIQUE 制約または主キー制約に属しているかどうかを示す値を取得または設定します。 |
このページのトップへ
メソッド
名前 | 説明 | |
---|---|---|
Dispose() | Generator によって使用されているすべてのリソースを解放します。 | |
Dispose(Boolean) | Generator によって使用されているアンマネージ リソースを解放します。オプションでマネージ リソースも解放できます。 | |
Equals | 指定した Object が、現在の Object と等しいかどうかを判断します。 (Object から継承されます。) | |
Finalize | オブジェクトがガベージ コレクションにより収集される前に、そのオブジェクトがリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) | |
GenerateNextValues | データ生成アルゴリズムに従って次の値を生成します。 | |
GetHashCode | 特定の型のハッシュ関数として機能します。 (Object から継承されます。) | |
GetOutputValue | OutputKey を使用して、出力値を取得します。 | |
GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) | |
Initialize | データ ジェネレーターを初期化します。 | |
MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) | |
OnGenerateNextValues | データ生成アルゴリズムに従って次の値を生成します。 | |
OnGetOutputValue | 1 つ以上の値で構成される現在の結果セットを取得します。 | |
OnInitialize | ジェネレーターを初期化します。 | |
OnNextValues | データ行の次の値のセットを生成します。 | |
OnSetInputValues | 指定された名前付きの値の一覧を使用して、データ ジェネレーターの入力プロパティを設定します。 | |
OnValidateInputs | データ ジェネレーターに対するすべての必須入力値が設定されたかどうかを検証します。 | |
SetExtensionHandle | 指定された拡張機能のハンドルを使用して拡張機能のハンドルを設定します。 | |
SetInputValues | データ ジェネレーターの入力値を設定します。 | |
ToString | 現在のオブジェクトを表す文字列を返します。 (Object から継承されます。) | |
ValidateInputs | データ ジェネレーターに対するすべての必須入力値が設定されたかどうかを検証します。 |
このページのトップへ
解説
標準のデータ ジェネレーターだけでは不十分な場合、カスタム データ ジェネレーターを作成できます。 カスタム データ ジェネレーターを作成するには、IGenerator を実装するクラスまたは Generator を継承するクラスを作成する必要があります。 クラスをデータ ジェネレーターとして指定するには、そのクラスを GeneratorAttribute で装飾します。
カスタム データ ジェネレーター用のカスタム デザイナーを作成することも、DefaultGeneratorDesigner を使用することもできます。
基本クラスの実装では、OutputAttribute でマークされたパブリック プロパティに基づいて出力が構築されます。 入力は、InputAttribute を使って設定されます。 属性でマークされたプロパティを使用することにより、厳密に型指定された入力値と出力値を単純な方法で宣言できます。
例
標準のデータ ジェネレーターでは、特殊な CHECK 制約を満たすデータは生成できません。 たとえば、2 つの異なる範囲のどちらかに日付が存在しなければならない CHECK 制約では、標準の DateTime ジェネレーターは使用できません。 この例では、こうした制約を満たすことができるカスタム データ ジェネレーターを作成します。 このジェネレーターは、2 つの異なる範囲を入力として受け取り、その 2 つの範囲のいずれかに該当する日付をランダムに生成します。 詳細については、「チュートリアル : 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)
{
// Deterministic
mRandom = new Random(this.Seed);
mRandomRange = new Random(this.Seed); //deterministic
// Non-deterministic
//mRandom = new Random();
//mRandomRange = new Random();
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: 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 of class
} // End of 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: 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
スレッド セーフ
この型のすべてのパブリック static (Visual Basic では Shared) メンバーは、スレッド セーフです。 インスタンス メンバーの場合は、スレッド セーフであるとは限りません。
参照
参照
Microsoft.Data.Schema.Tools.DataGenerator 名前空間
その他の技術情報
チュートリアル : CHECK 制約のカスタム データ ジェネレーターの作成