Поделиться через


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 Получает или задает сведения о проверочном ограничении для столбца.
Открытое свойство DefaultLocaleId Возвращает или задает код языка.
Открытое свойство DefaultValue Возвращает или задает значение столбца по умолчанию.
Открытое свойство ExtensionHandle Получает дескриптор расширения.
Открытое свойство MaxLength Получает или задает максимальную длину значений в этом столбце.
Открытое свойство Nullable Получает или задает значение, которое указывает, может ли столбец принимать значение nullпустая ссылка (Nothing в Visual Basic).
Открытое свойство OutputKey Возвращает или задает ключ, используемый для извлечения выходных значений.
Открытое свойство PercentageNull Получает или задает процент созданных для этого столбца значений, которые должны равняться nullпустая ссылка (Nothing в Visual Basic).Процент представляет собой целое число от 0 до 100.
Открытое свойство Precision Возвращает или задает точность данных.
Открытое свойство RowsToInsert Возвращает или задает число создаваемых строк.
Открытое свойство Scale Возвращает или задает масштаб данных.
Открытое свойство SchemaName Возвращает или задает имя схемы, к которой относится столбец.
Открытое свойство Seed Возвращает или задает начальное значение.Начальное значение может использоваться для инициализации детерминированного алгоритма создания случайных данных.
Открытое свойство TableName Возвращает или задает имя таблицы, к которой относится столбец.
Открытое свойство TargetType Получает или задает целевой тип данных столбца.
Открытое свойство 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 Извлекает текущий набор результирующих данных из одного или нескольких значений.
Защищенный метод OnInitialize Инициализирует генератор.
Защищенный метод OnNextValues Создает следующий набор значений для строки данных.
Защищенный метод OnSetInputValues Задает входные свойства генератора данных с помощью предоставленного списка именованных значений.
Защищенный метод OnValidateInputs Проверяет, что для генератора данных заданы все необходимые входные значения.
Открытый метод SetExtensionHandle Задает дескриптор расширения с помощью заданного дескриптора расширения.
Открытый метод SetInputValues Задает входные значения для генератора данных.
Открытый метод ToString Возвращение строки, представляющей текущий объект. (Унаследовано от Object.)
Открытый метод ValidateInputs Проверяет, что для генератора данных заданы все необходимые входные значения.

В начало страницы

Заметки

Если стандартных генераторов данных недостаточно, можно создать настраиваемые генераторы данных. Чтобы создать настраиваемый генератор данных, необходимо создать класс, реализующий интерфейс IGenerator либо наследующий от класса Generator. Чтобы идентифицировать класс как генератор данных, оформите его атрибутом GeneratorAttribute.

Для настраиваемого генератора данных можно создать настраиваемый конструктор либо воспользоваться конструктором DefaultGeneratorDesigner.

Реализация базового класса создает выходные данные на основе общедоступных свойств, помеченных атрибутом OutputAttribute. Входные значения устанавливаются с помощью атрибута InputAttribute. Использование свойств, помеченных атрибутами, предоставляют простой механизм для объявления входных и выходных типобезопасных значений.

Примеры

Стандартные генераторы данных не позволяют создавать данные, удовлетворяющие некоторым проверочным ограничениям. Например, если проверочное ограничение требует, чтобы дата попадала в один из двух раздельных диапазонов, стандартный генератор DateTime использовать нельзя. В данном примере создается настраиваемый генератор данных, который удовлетворяет требованиям подобного ограничения. Генератор принимает в качестве входных данных два различных диапазона и создает случайную дату, которая попадает в один из двух диапазонов. Дополнительные сведения см. в разделе Пошаговое руководство. Создание пользовательского генератора данных для проверочного ограничения.

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 (Shared в Visual Basic), являются потокобезопасными. Потокобезопасность членов экземпляров не гарантируется.

См. также

Ссылки

Microsoft.Data.Schema.Tools.DataGenerator - пространство имен

GeneratorAttribute

GeneratorInit

IGenerator

Другие ресурсы

Пошаговое руководство. Создание пользовательского генератора данных для проверочного ограничения

Creating Custom Data Generators

Общие сведения о расширении генераторов данных

Specifying Details of Data Generation for a Column