Descripción general de la extensibilidad del Generador de datos
Puede usar Visual Studio Premium o Visual Studio Ultimate con el fin de generar datos significativos para las pruebas. Los generadores de datos integrados permiten generar datos aleatorios, generar datos a partir de orígenes de datos existentes y controlar muchos aspectos de la generación de datos. Si la funcionalidad de los generadores integrados no es suficiente, puede crear generadores de datos personalizados. Para crear generadores de datos personalizados, se utilizan las clases del espacio de nombres Microsoft.Data.Schema.Tools.DataGenerator.
La API de extensibilidad de generadores de datos
La API de extensibilidad proporciona clases de las que los programadores pueden heredar. Además de clases, la API incluye atributos que se pueden aplicar a las clases derivadas. Al aplicar estos atributos, reduce la cantidad de código requerido en los generadores personalizados para los casos comunes.
Puede usar la API de extensibilidad de las tres maneras siguientes para crear generadores de datos personalizados:
Extensibilidad |
Descripción |
Dificultad |
Ejemplo |
---|---|---|---|
Extensibilidad declarativa |
|
Fácil |
El generador de datos Integer integrado |
Extensibilidad normal |
|
Media. Se recomienda emplear este método la mayoría de las veces. |
Tutorial: Crear un generador de datos personalizado Tutorial: Crear un generador de datos personalizado para una restricción CHECK |
Extensibilidad base |
|
Difícil |
Ninguno |
Extensibilidad base
La API de extensibilidad base es el mecanismo que permite la interacción entre el motor de generación de datos y los diseñadores de planes de generación de datos. Esta API se diseñó con los siguientes objetivos:
Solidez, para promover una implementación coherente y sólida en el motor de tiempo de diseño y en el motor de tiempo de ejecución.
Flexibilidad, para poder usar generadores complejos como el generador enlazado a datos.
La API de extensibilidad base ofrece un acceso de nivel más bajo, pero a costa de mayor complejidad en comparación con la API de extensibilidad declarativa, que es de nivel más alto.
Registrar generadores de datos personalizado
Para poder usar el generador de datos personalizado, debe registrarlo en su equipo. Si pasa el generador de datos personalizado a otras personas para que lo usen, éstas deberán registrar el generador en sus equipos.
Puede registrar generadores de datos personalizados de las maneras siguientes:
Método |
Permisos necesarios |
Ejemplo |
---|---|---|
Registrar el generador en la carpeta Extensions. |
Usuario avanzado o superior |
|
Crear un proyecto de implementación para registrar el generador. |
Administrador |
|
Generadores de datos, distribuciones y diseñadores
Puede crear generadores de datos personalizados y diseñadores personalizados para esos generadores. También puede crear distribuciones personalizadas para los generadores de datos numéricos y diseñadores personalizados para dichas distribuciones.
Los generadores de datos personalizados generan datos de pruebas aleatorios según un conjunto de reglas que debe especificar. Puede usar el diseñador predeterminado con dichos generadores o crear un diseñador personalizado que se hereda de DefaultGeneratorDesigner. Por ejemplo, el generador de datos de expresión regular es un generador integrado, pero usa un diseñador personalizado para poder realizar una validación personalizada de las entradas del usuario en tiempo de diseño.
Mediante un diseñador de generador personalizado, puede personalizar cómo las propiedades de entrada y salida se recuperan del usuario, se establecen los valores predeterminados y se especifica el comportamiento de la validación.
Mediante una distribución personalizada, puede controlar la distribución de valores numéricos creada por un generador de datos.
Los diseñadores de distribución personalizada controlan el comportamiento en tiempo de diseño para una distribución personalizada. Este comportamiento incluye obtener los nombres de las propiedades de entrada para la distribución, establecer los valores predeterminados de las propiedades de entrada y validar los valores de las propiedades de entrada para la distribución.
Localización de generadores de datos
Los generadores de datos incluidos con Visual Studio Premium y Visual Studio Ultimate están traducidos porque Visual Studio se ofrece en varios idiomas. Es probable que no tenga que adaptar sus generadores de datos personalizados. Si tuviera que localizar un generador de datos que va a crear, debe crear un diseñador personalizado. También puede reemplazar el método GetInputs para adaptar los nombres de las propiedades de entrada.
Nota
Si es posible, debe heredar de la clase DefaultGeneratorDesigner, no implementar la interfaz IDesigner, para evitar trabajo adicional.
Creación de instancias del generador de datos
Los generadores de datos personalizados pueden compartir datos. El ámbito de los datos compartidos es el tipo de generador y la tabla de base de datos. Cada tipo de generador tiene un diccionario de instancia único para cada tabla de base de datos. Por ejemplo, un generador de datos personalizados para una tabla denominada Clientes tiene acceso a un diccionario compartido. Puede colocar cualquier información en el diccionario y compartir dicha información. Se usará la misma instancia del diccionario para cada tipo de generador y cada tabla. Por ejemplo, puede crear un generador de datos personalizados y solicitar el diccionario de GeneratorInit. A continuación, puede comprobar si el diccionario contiene información compartida. En caso afirmativo, puede usar dicha información para generar datos. También puede crear la información compartida que podrán usar otras instancias del generador.
Nota
La creación de instancias de generador es una técnica avanzada. Puede usar la creación de instancias del generador para crear un generador de datos personalizado que administre las restricciones CHECK en las columnas; por ejemplo, una restricción CHECK que necesita que una columna sea mayor que otra.
El proceso de generación de datos
La generación de datos se produce en las siguientes fases:
Determinar el tipo de diseñador |
Tiempo de diseño |
Esta fase requiere como entrada el tipo de generador de datos. El motor puede consultar GeneratorAttribute para obtener el valor del tipo de diseñador. En la mayoría de los casos, GeneratorAttribute se hereda de la clase base, que especifica el diseñador predeterminado. |
Crear instancias de diseñador e inicializarlas |
Tiempo de diseño |
Se crea una instancia del diseñador. Se inicializa el diseñador llamando a Initialize y pasando el tipo de generador como argumento. |
Recuperar los descriptores de entrada |
Tiempo de diseño |
InputDescriptor se recupera del diseñador. Para ello, el diseñador predeterminado obtiene todas las propiedades del generador de datos que están marcadas con el atributo InputAttribute. |
Establecer los valores predeterminados |
Tiempo de diseño |
Se establecen los valores predeterminados. |
Obtener las descripciones de salida del generador |
Tiempo de diseño |
OutputDescriptor se recupera del diseñador. El diseñador predeterminado usa las propiedades marcadas con el atributo OutputAttribute para crear las descripciones que aparecen en la columna Resultado del generador de la ventana Detalles de columna. |
Crear una instancia del generador |
Tiempo de ejecución |
Se crea una instancia del generador de datos con el constructor predeterminado. |
Establecer las entradas del generador |
Tiempo de ejecución |
Se establecen todos los valores de entrada en el generador de datos a partir de los descriptores de entrada obtenidos del diseñador. |
Validar el generador |
Tiempo de ejecución |
Se llama al método ValidateInputs. Si se produce un error en la validación, el generador producirá una excepción InputValidationException. Cualquier excepción distinta de una excepción de validación de datos se tratará como un error irrecuperable. |
Inicializar el generador |
Tiempo de ejecución |
Se llama al método Initialize. Este paso permite al generador de datos realizar los ajustes de configuración necesarios, como especificar la cadena de conexión para la base de datos de destino o establecer el valor de inicialización del generador de números aleatorios antes de que se produzca la generación de datos. Esta fase tiene lugar una vez antes de que se generen los datos. |
Ejecutar la generación de datos |
Tiempo de ejecución |
Durante esta fase, se generan nuevos resultados llamando al método GenerateNextValues. Los resultados pueden recuperarse mediante el método GetOutputValue. Este método recupera un valor escalar del generador que corresponde a la clave de salida que se pasa al generador como entrada. Esta fase recorre los resultados hasta que se hayan generado todos los resultados deseados. |
Limpiar |
Tiempo de ejecución |
Una vez completada la generación de datos, se llama a Dispose para limpiar el generador. |
Vea también
Tareas
Cómo: Crear generadores de datos personalizados
Tutorial: Crear un generador de datos personalizado
Referencia
Microsoft.Data.Schema.DataGenerator
Conceptos
Generar datos de pruebas especializados con un generador de datos personalizado