次の方法で共有


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 名前空間

GeneratorAttribute

GeneratorInit

IGenerator

その他の技術情報

チュートリアル : CHECK 制約のカスタム データ ジェネレーターの作成

Creating Custom Data Generators

データ ジェネレーター機能拡張の概要

Specifying Details of Data Generation for a Column