Share via


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

Visual Studio Premium または Visual Studio Ultimate を使用すると、テスト用に最適なデータを生成できます。 組み込みのデータ ジェネレーターでは、ランダムなデータを生成したり、既存のデータ ソースからデータを生成したりできるほか、データ生成に伴うさまざまな側面を制御できます。 組み込みのジェネレーターの機能が不足している場合、カスタム データ ジェネレーターを作成できます。 カスタム データ ジェネレーターを作成するには、Microsoft.Data.Schema.Tools.DataGenerator 名前空間のクラスを使用します。

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

機能拡張 API は、開発者が継承できるクラスを提供します。 API には、クラス以外に、派生クラスに適用できる属性が含まれています。 これらの属性を適用することで、一般的にカスタム ジェネレーターで必要とされるコードの量を減らすことができます。

カスタム データ ジェネレーターを作成するには、次の 3 つの方法で機能拡張 API を使用します。

機能拡張

説明

難易度

宣言型の機能拡張

  • Generator クラスから継承します。

  • InputAttribute 属性と OutputAttribute 属性を使用して、カスタムの入力プロパティおよび出力プロパティを追加します。

初級

組み込みの整数データ ジェネレーター

通常の機能拡張

標準 ほとんどの場合、この方法をお勧めします。

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

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

基本機能拡張

  • IGenerator インターフェイスを実装するクラスを作成します。

  • ジェネレーターで必要なすべてのメソッドを実装します。

  • IDesigner を実装するジェネレーターのカスタム デザイナーを作成します。

  • デザイナーで必要なすべてのメソッドを実装します。

上級

なし

基本機能拡張

基本機能拡張 API は、データ生成エンジンおよびデータ生成計画のデザイナーが対話に使用する機構です。 この API は、次の目標を達成できるように設計されました。

  • 保全性 - デザイン時エンジンと実行時エンジンの両方で、一貫した堅牢な実装を促進します。

  • 柔軟性 - データ バインド ジェネレーターなどの複雑なジェネレーターをサポートします。

基本機能拡張 API で暗黙的に行われるデザインのトレードオフは、上位レベルの宣言機能拡張 API よりも複雑であることを示します。

カスタム データ ジェネレーターを登録する

カスタム ジェネレーターを使用する前に、そのジェネレーターをコンピューターに登録する必要があります。 他のユーザーもカスタム データ ジェネレーターを使用できるようにするには、そのジェネレーターを他のユーザーのコンピューターにも登録する必要があります。

カスタム データ ジェネレーターを登録する方法は、次のとおりです。

メソッド

[必要なアクセス許可]

ジェネレーターを Extensions フォルダーに登録します。

パワー ユーザー以上

ジェネレーターを登録するための配置プロジェクトを作成します。

Administrator

  • なし

データ ジェネレーター、分布、およびデザイナー

カスタム データ ジェネレーターや、それらのジェネレーターに使用できるカスタム デザイナーを作成できます。 数値用のデータ ジェネレーターに使用できるカスタム分布や、それらの分布に使用できるカスタム デザイナーを作成することもできます。

  • カスタム データ ジェネレーターは、指定した規則のセットに基づいてランダムなテスト データを生成します。 このジェネレーターと共に既定のデザイナーを使用するか、DefaultGeneratorDesigner から継承することで、このジェネレーターに使用するカスタム デザイナーを作成できます。 たとえば、正規表現データ ジェネレーターは、カスタム デザイナーを使用する組み込みのジェネレーターで、デザイン時にユーザー入力のカスタム検証を実行できます。

  • カスタム ジェネレーター デザイナーでは、入力プロパティや出力プロパティをユーザーから取得したり、既定の設定や検証動作の指定を行ったりする方法をカスタマイズできます。

  • カスタム分布では、データ ジェネレーターが生成する数値の配分を制御できます。

  • カスタム分布デザイナーは、カスタム分布のデザイン時の動作を制御します。 これには、分布の入力プロパティ名の取得、入力プロパティの既定値の設定、分布の入力プロパティの値の検証などの動作が含まれます。

データ ジェネレーターとローカリゼーション

Visual Studio には複数の言語バージョンが付属しているため、Visual Studio Premium および Visual Studio Ultimate に付属するデータ ジェネレーターはローカライズされます。 ほとんどの場合、カスタム データ ジェネレーターをローカライズする必要はありません。 ローカライズされるデータ ジェネレーターを作成する必要がある場合は、カスタム デザイナーを作成する必要があります。 また、GetInputs メソッドをオーバーライドして、入力プロパティ名をローカライズすることもできます。

注意

可能な限り、IDesigner インターフェイスを実装するのではなく、DefaultGeneratorDesigner クラスから継承して、追加作業が発生しないようにします。

データ ジェネレーターのインスタンス化

カスタム データ ジェネレーターはデータを共有できます。 共有データのスコープは、ジェネレーターの種類とデータベース テーブルです。 すべてのジェネレーターには、データベース テーブルごとに一意のインスタンス ディクショナリがあります。 たとえば、Customers という名前のテーブルのカスタム データ ジェネレーターは、共有ディクショナリへのアクセス許可を持っています。 任意の情報をディクショナリに入力して、その情報を共有できます。 ディクショナリは、ジェネレーターの種類およびテーブルごとに必ず同じインスタンスになります。 たとえば、カスタム データ ジェネレーターを作成し、GeneratorInit からディクショナリを要求できます。 次に、ディクショナリに共有情報が含まれるかどうかを確認します。 共有情報が含まれる場合、その情報を使用してデータを生成できます。 ジェネレーターの他のインスタンスが使用できる共有情報を作成することもできます。

注意

ジェネレーターのインスタンス化は高度な技術です。 ジェネレーターのインスタンス化を使用すると、ある列が別の列より大きいことを要求する CHECK 制約などの列間の CHECK 制約を処理するカスタム データ ジェネレーターを作成できます。

データ生成プロセス

データ生成は、次のフェーズで行われます。

デザイナーの型の確認

デザイン時

このフェーズでは、入力としてデータ ジェネレーターの種類が必要です。 エンジンは GeneratorAttribute を問い合わせて、デザイナーの型を取得します。 ほとんどの場合、GeneratorAttribute は既定のデザイナーを指定する基本クラスを継承します。

デザイナーのインスタンス化および初期化

デザイン時

デザイナーがインスタンス化されます。 デザイナーの初期化は、Initialize を呼び出し、引数としてジェネレーターの型を渡すことで実行されます。

入力記述子の取得

デザイン時

デザイナーから InputDescriptor が取得されます。 既定のデザイナーは、InputAttribute でマークされているデータ ジェネレーターのすべてのプロパティを取得することで、これを実行します。

既定値の設定

デザイン時

既定値が設定されます。

ジェネレーター出力の説明の取得

デザイン時

デザイナーから OutputDescriptor が取得されます。 既定のデザイナーは OutputAttribute が指定されたプロパティ使用して、[列の詳細] ウィンドウの [ジェネレーター出力] 列に表示される説明を作成します。

ジェネレーターのインスタンス化

実行時

既定のコンストラクターを使用してデータ ジェネレーターがインスタンス化されます。

ジェネレーター入力の設定

実行時

すべての入力値は、デザイナーから取得される入力記述子からデータ ジェネレーターで設定されます。

ジェネレーターの検証

実行時

ValidateInputs メソッドが呼び出されます。 検証に失敗した場合、ジェネレーターは InputValidationException 例外をスローします。 データ検証の例外以外の例外は、回復不能なエラーとして扱われます。

ジェネレーターの初期化

実行時

Initialize メソッドが呼び出されます。 この手順により、データ ジェネレーターはデータ生成の前に、ターゲット データベースの接続文字列の指定、または乱数ジェネレーターのシードなど、必要な設定を実行できます。 このフェーズは、データ生成の前に 1 回発生します。

データ生成の実行

実行時

このフェーズでは、GenerateNextValues メソッドを呼び出すことで、新しい結果が生成されます。 結果は、GetOutputValue メソッドを使用して取得できます。 このメソッドは、ジェネレーターに入力として渡される出力キーに対応するジェネレーターから、スカラー値を取得します。 このフェーズは、必要な結果がすべて生成されるまで結果を反復処理します。

クリーンアップ

実行時

すべてのデータ生成が完了した後、Dispose が呼び出され、ジェネレーターがクリーンアップされます。

参照

処理手順

方法 : カスタム データ ジェネレーターを作成する

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

参照

Microsoft.Data.Schema.DataGenerator

概念

カスタム データ ジェネレーターを使用した特殊なテスト データの生成