Tutorial: Crear un generador de datos personalizado
A medida que desarrolle su esquema de base de datos, puede probar más eficazmente los cambios propuestos si rellena una base de datos de prueba con información que represente los datos de producción de la forma más precisa posible. Los generadores de datos personalizados proporcionan datos de pruebas que cumplen sus especificaciones de manera más exacta que los generadores de datos integrados. Por ejemplo, puede crear un generador para rellenar una columna de tabla con cadenas aleatorias de una lista que especifique o con números de un intervalo que especifique. Para obtener más información, vea Descripción general de la extensibilidad del Generador de datos.
En este tema paso a paso, creará un generador de datos personalizado que genera cadenas de dirección aleatorias. En este tutorial realizará las tareas siguientes:
Crear una biblioteca de clases para su generador de datos de dirección personalizado que hereda de Generator.
Agregar una propiedad de salida para usarla como salida del generador.
Reemplazar el método OnGenerateNextValues para generar los datos.
Firmar el ensamblado del generador.
Crear un archivo XML asociado al ensamblado que se usa para el registro.
Crear un proyecto de base de datos y un plan de generación de datos para probar el generador de datos personalizado.
Requisitos previos
Para poder completar este tutorial, debe tener instalado Visual Studio Premium o Visual Studio Ultimate.
Crear una biblioteca de clases para el generator personalizado
El primer paso consiste en crear una biblioteca de clases para el generador de datos de dirección personalizado.
Para crear una biblioteca de clases para un generador personalizado
Cree un proyecto de biblioteca de clases de Visual C# y asígnele el nombre SampleGenerator.
En el Explorador de soluciones, haga clic con el botón secundario en el proyecto y, a continuación, haga clic en Agregar referencia.
Haga clic en la ficha .NET.
En la columna Nombre de componente, seleccione los componentes siguientes:
Microsoft.Data.Schema
Microsoft.Data.Schema.Sql
Microsoft.Data.Schema.Tools
Sugerencia Presione CTRL haciendo clic para seleccionar varios componentes.
Haga clic en Aceptar una vez seleccionados todos los componentes necesarios.
Las referencias seleccionadas aparecerán bajo el nodo Referencias del proyecto en el Explorador de soluciones.
En la parte superior de la ventana Código, agregue las siguientes líneas de código antes de la declaración de clase.
using Microsoft.Data.Schema.Tools.DataGenerator; using Microsoft.Data.Schema.Extensibility; using Microsoft.Data.Schema; using Microsoft.Data.Schema.Sql;
Cambie el nombre de la clase de Class1 a AddressGenerator.
Precaución De manera predeterminada, el nombre que asigne a la clase es el que aparecerá en la lista de la columna Generador en la ventana Detalles de columna. Debe especificar un nombre que no entre en conflicto con el nombre de un generador integrado o de otro generador personalizado.
public class AddressGenerator { }
Especifique que la clase hereda de Generator, como se muestra en el ejemplo siguiente:
public class AddressGenerator : Generator { }
Agregue DatabaseSchemaProviderCompatibilityAttribute, como se muestra en el ejemplo siguiente:
[DatabaseSchemaProviderCompatibility(typeof(SqlDatabaseSchemaProvider))] public class AddressGenerator : Generator { }
Para obtener más información sobre el atributo de compatibilidad de extensión, vea Extender las características de base de datos de Visual Studio.
En el menú Archivo, haga clic en Guardar todo.
Agregar una propiedad de salida al generador
En la sección anterior creó una biblioteca de clases que heredaba de la clase Generator. En esta sección, agregará una propiedad de salida a la clase. Las propiedades de salida contienen los valores de los datos generados. También especifican qué tipos de datos puede producir este generador.
Para agregar una propiedad de salida
Cree las variables miembro que se usarán para generar la dirección, como se muestra en el ejemplo siguiente.
La variable _address se usará en un paso posterior en una propiedad de salida.
private Random _random; private string _street; private string _city; private string _state; private int _zipCode; private string _address; private static readonly List<String> _states = new List<string>() { "AK", "AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY" };
Cree una propiedad privada para la variable miembro _random, como se muestra en el ejemplo siguiente:
private Random Random { get { if (_random == null) _random = new Random(base.Seed); return _random; } }
Cree una propiedad pública para la variable miembro _address y agréguele OutputAttribute, como se muestra en el ejemplo siguiente:
[Output(Description = "Generates street and city values of \"2150 Newton Street, San Francisco\", with random state and zip code.", Name = "Address")] public string Address { get { return this._address; } }
En el menú Archivo, haga clic en Guardar todo.
Reemplazar el método OnGenerateNextValues
Visual Studio llama al método OnGenerateNextValues de cada generador para cada conjunto de valores que necesita. Al crear un generador de datos, debe invalidar este método para proporcionar lógica que genere los valores de cada una de las propiedades de salida.
Para reemplazar el método OnGenerateNextValues
Reemplace el método OnGenerateNextValues, como se muestra en el ejemplo siguiente:
protected override void OnGenerateNextValues() { this._street = "2150 Newton Street"; this._city = "San Francisco"; this._state = _states[Random.Next(0, _states.Count)]; this._zipCode = Int32.Parse(String.Format("{0}{1}{2}{3}{4}", GetRandomDigit(1), GetRandomDigit(), GetRandomDigit(), GetRandomDigit(), GetRandomDigit())); this._address = String.Format("{0}, {1}, {2} {3}", _street, _city, _state, _zipCode); }
Agregue los métodos siguientes, que se usan para crear el valor para la variable _zipcode:
private int GetRandomDigit() { return GetRandomDigit(0); } private int GetRandomDigit(int lowNumber) { return Random.Next(lowNumber, 10); }
En el menú Archivo, haga clic en Guardar todo.
Firmar el generador
Después, debe firmar el generador de datos personalizado con un nombre seguro.
Para firmar el generador con un nombre seguro
En el menú Proyecto, haga clic en Propiedades de SampleGenerator.
En la ficha Firma, active la casilla Firmar el ensamblado.
En el cuadro Elija un archivo de clave de nombre seguro, haga clic en <Nuevo...>.
Aparecerá el cuadro de diálogo Crear clave de nombre seguro.
En el cuadro Nombre del archivo de clave, escriba SampleGeneratorKey.
Escriba y confirme una contraseña y, a continuación, haga clic en Aceptar.
Al generar la solución, se usa el archivo de clave para firmar el ensamblado.
En el menú Archivo, haga clic en Guardar todo.
En el menú Generar, haga clic en Generar solución.
Ha creado un generador de datos personalizados.
Registrar el ensamblado del generador
Una vez firmado y compilado el ensamblado, el paso siguiente consiste en recopilar la información del ensamblado generada en el proyecto, incluidas la versión, referencia cultural y PublicKeyToken, para facilitar el registro del ensamblado del generador.
Para recopilar información del ensamblado
En el menú Ver, haga clic en Otras ventanas y, a continuación, haga clic en Ventana Comandos para abrir la ventana Comandos.
En la ventana Comando, escriba el código siguiente. En FilePath, sustituya la ruta de acceso y el nombre de archivo por la ruta y el nombre de su archivo .dll compilado. Debe escribir la ruta de acceso y el nombre de archivo entre comillas.
Nota
De forma predeterminada, la ruta de acceso del archivo .dll compilado es SampleGenerator\bin\Debug.
? System.Reflection.Assembly.LoadFrom(@"<FilePath>").FullName
Presione Entrar. La línea debe tener un aspecto similar al siguiente con el PublicKeyToken concreto:
" SampleGenerator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nnnnnnnnnnnnnnnn"
Anote o copie esta información de ensamblado; se usará en el procedimiento siguiente.
A continuación, creará un archivo XML usando la información del ensamblado que recopiló en el procedimiento anterior.
Para crear el archivo XML
En el Explorador de soluciones, seleccione el proyecto SampleGenerator.
En el menú Proyecto, seleccione Agregar nuevo elemento.
En el recuadro Plantillas, busque y seleccione el elemento Archivo XML.
En el cuadro de texto Nombre, escriba SampleGenerator.Extensions.xml y haga clic en el botón Agregar.
El archivo SampleGenerator.Extensions.xml se agrega al proyecto en el Explorador de soluciones.
Nota
Debe usar el nombre de su dll (en este caso, "SampleGenerator" seguido de ".Extensions .xml") para que el ensamblado se registre correctamente.
Abra el archivo SampleGenerator.Extensions.xml y actualícelo para que coincida con el XML siguiente. Reemplace la versión, referencia cultural y PublicKeyToken del ensamblado que recuperó en el procedimiento anterior.
Nota
El tipo de extensión debe usar el nombre completo de la clase. En este caso: tipo de extensión="SampleGenerator.AddressGenerator".
<?xml version="1.0" encoding="utf-8"?> <extensions assembly="" version="1" xmlns="urn:Microsoft.Data.Schema.Extensions" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:Microsoft.Data.Schema.Extensions Microsoft.Data.Schema.Extensions.xsd"> <extension type="SampleGenerator.AddressGenerator" assembly="SampleGenerator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nnnnnnnnnnnnnnnn" enabled="true"/> </extensions>
En el menú Archivo, haga clic en Guardar todo.
A continuación, copiará el ensamblado y el archivo XML en el directorio Extensions. Cuando Visual Studio Premium se inicie, identificará todas las extensiones del directorio %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions y sus subdirectorios, y las registrará para su uso en la sesión.
Para copiar y registrar el ensamblado y el archivo XML en el directorio Extensions
Cree una carpeta denominada CustomGenerators en el directorio %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\.
Copie el archivo de ensamblado SampleGenerator.dll del directorio ProjectFolder\SampleGenerator\SampleGenerator\bin\Debug\ a la carpeta %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators que creó.
Copie el archivo SampleGenerator.Extensions.xml del directorio ProjectFolder\SampleGenerator\SampleGenerator\ al directorio %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators que creó.
Nota
Se recomienda colocar los ensamblados de extensión en una carpeta del directorio %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions. Esto le ayudará a identificar qué extensiones se incluían con el producto y cuáles son creaciones personalizadas suyas. También debe considerar la posibilidad de organizar sus extensiones en carpetas específicas de la categoría.
Probar el generator de direcciones
Ahora que ha creado el generador de datos de direcciones, debe iniciar una nueva instancia de Visual Studio. Cuando Visual Studio se inicie, registrará el ensamblado SampleGenerator que agregó al directorio %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators. A continuación, creará un proyecto de base de datos en el que puede comprobar que el generador de datos de direcciones funciona correctamente.
Para crear el proyecto de base de datos
Inicie una nueva instancia de Visual Studio, que reconocerá el ensamblado SampleGenerator.dll y lo registrará.
En el menú Archivo, elija Nuevo y, a continuación, haga clic en Proyecto.
Aparecerá el cuadro de diálogo Nuevo proyecto.
En Plantillas instaladas, expanda el nodo Base de datos y, a continuación, haga clic en el nodo SQL Server.
En la lista de plantillas, haga clic en Proyecto de base de datos de SQL Server 2008.
En Nombre, escriba SampleGeneratorDB.
Nota
Si ya ha completado todos los pasos de Tutorial: Crear un generador de datos personalizado para una restricción CHECK, ha creado el proyecto SampleGeneratorDB y puede ir al paso 9.
Active la casilla Crear directorio para la solución.
Acepte los valores predeterminados para Ubicación, Nombre de la solución y Agregar al control de código fuente y, a continuación, haga clic en Aceptar.
Haga clic en Aceptar.
El nuevo proyecto de base de datos, SampleGeneratorDB, aparecerá en el Explorador de soluciones.
En el menú Ver, haga clic en Vista de esquema de la base de datos.
Si no estaba visible, aparece la Vista de esquema.
Después, agregará una tabla sencilla al proyecto con una única columna con un tipo SQL de varchar.
Para agregar una tabla al proyecto de base de datos
En Vista de esquema, expanda sucesivamente los nodos SampleGeneratorDB, Esquemas y dbo y, después, haga clic en el nodo Tablas.
En el menú Proyecto, haga clic en Agregar nuevo elemento.
Nota
También puede hacer clic con el botón secundario en el proyecto SampleGeneratorDB en la Vista de esquema, elegir Agregar y hacer clic en Tabla.
En Plantillas, haga clic en Tabla.
Nota
En la lista Categorías, puede hacer clic en Tablas y vistas para localizar con más facilidad la plantilla de una tabla.
En Nombre, escriba Addresses como nombre de la nueva tabla.
Haga clic en Agregar para agregar la tabla al proyecto de base de datos.
El Explorador de soluciones muestra el nuevo archivo para la tabla en el proyecto de base de datos. La Vista de esquema muestra el nuevo objeto de tabla. Aparecerá el editor de Transact-SQL y se mostrará la definición de la nueva tabla.
En el editor de Transact-SQL, modifique la definición de la tabla para que coincida con el ejemplo siguiente:
CREATE TABLE [dbo].[Addresses] ( address varchar(100) )
En el menú Archivo, haga clic en Guardar Addresses.table.sql.
Con la tabla en su sitio, puede configurar ahora la base de datos para la implementación.
Para configurar las opciones de implementación del proyecto
En el Explorador de soluciones, haga clic en SampleGeneratorDB (el proyecto, no la solución).
En el menú Proyecto, haga clic en Propiedades de SampleGeneratorDB.
Aparecerá la ventana Propiedades del proyecto.
Nota
También puede hacer clic con el botón secundario en SampleGeneratorDB en el Explorador de soluciones y, a continuación, hacer clic en Propiedades.
Haga clic en la pestaña Implementar.
En Implementar acción, haga clic en Crear un script de implementación (.sql) e implementar en la base de datos.
Haga clic en el botón Editar para especificar la conexión de destino.
Especifique la información para conectarse al servidor de bases de datos en el que desea implementar la base de datos SampleGeneratorDB.
En Seleccione o escriba el nombre de la base de datos, escriba SampleGeneratorDB.
Haga clic en Aceptar.
En Conexión de destino se mostrará la cadena de conexión. Observe que el Nombre de la base de datos de destino es SampleGeneratorDB.
Acepte los valores predeterminados para las demás opciones.
En el menú Archivo, haga clic en Guardar los elementos seleccionados.
Se guarda la configuración de generación del proyecto.
A continuación, compilará el proyecto de base de datos.
Para generar el proyecto de base de datos
En el menú Generar, haga clic en Generar solución.
Se genera el proyecto de base de datos. Si finaliza correctamente, aparecerá el mensaje "Compilación correcta" en la barra de estado y los resultados de la compilación aparecerán en la Ventana de salida.
A continuación, implementará el proyecto de base de datos.
Para implementar el proyecto de base de datos en el servidor de bases de datos
En el Explorador de soluciones, haga clic en SampleGeneratorDB (el proyecto, no la solución).
En el menú Compilar, haga clic en Implementar SampleGeneratorDB.
El proyecto de base de datos se implementa a través de la conexión especificada en la configuración de compilación. Aparecerá el mensaje "Implementación correcta" en la barra de estado y en la Ventana de salida.
Crear y configurar el plan de generación de datos
El siguiente paso es crear el plan de generación de datos. El plan de generación de datos contiene información acerca de las tablas y columnas que desea rellenar de datos. Para obtener más información, vea Cómo: Crear planes de generación de datos.
Para crear y configurar el plan de generación de datos
En el Explorador de soluciones, seleccione el nodo Planes de generación de datos.
En el menú Proyecto, haga clic en Agregar nuevo elemento.
En el panel Categorías, haga clic en Planes de generación de datos.
En el panel Plantillas, haga clic en Plan de generación de datos.
En el cuadro de texto Nombre, escriba SampleGenerator.dgen.
Haga clic en Agregar.
Se crea el plan de generación de datos. Aparece el plan de generación de datos.
La ventana del plan de generación de datos está dividida horizontalmente en dos recuadros. El recuadro superior enumera las tablas que se definen en el esquema del proyecto de base de datos; en este caso, la tabla dbo.Addresses. El recuadro inferior muestra detalles de las columnas de la tabla que está resaltada en el recuadro superior; en este caso, la columna address.
Nota
Si la ventana Vista previa de generación de datos no está abierta, abra el menú Datos, elija Generador de datos y, a continuación, haga clic en Vista previa de generación de datos para abrirla. De forma predeterminada, la ventana Vista previa de generación de datos está acoplada y organizada por fichas en la parte inferior de la ventana del plan de generación de datos. Para expandir la vista, haga clic en la ventana y, a continuación, haga clic en Organización por fichas en el menú Ventana. También puede hacer clic con el botón secundario en la barra de título y, a continuación, hacer clic en Acoplar como organización por fichas.
En el diseñador de SampleGenerator.dgen, compruebe que la tabla dbo.Addresses y la columna address están activadas.
En el diseñador de SampleGenerator.dgen, seleccione la columna address y haga clic en el desplegable Generador para seleccionar AddressGenerator.
El generador de direcciones personalizado está configurado ahora correctamente.
En el menú Archivo, haga clic en Guardar todo.
Ejecutar el plan de generación de datos para generar datos de direcciones
Por último, ejecutará el plan de generación de datos y verá su generador de datos de direcciones personalizado en acción.
Para ejecutar el plan para generar datos
En el Explorador de soluciones, haga clic en SampleGenerator.dgen.
Nota
El plan de generación de datos también debe estar abierto. Si el plan no está abierto, ábralo primero.
En el menú Datos, elija Generador de datos y, a continuación, haga clic en Generar datos.
Aparecerá el cuadro de diálogo Conectar a base de datos.
En la lista Información de conexión de generación de datos, haga clic en la base de datos SampleGeneratorDB y, a continuación, haga clic en Aceptar.
Haga clic en Sí cuando se le pregunte si desea borrar el contenido de las tablas antes de insertar filas nuevas.
Se generarán los datos. En la ventana Rellenado, la columna de estado se actualizará con el estado de la generación de datos. La barra de estado resume la generación de datos para todas las tablas.
(Opcional) Utilice una herramienta diferente para iniciar sesión en la base de datos. Puede usar el editor de Transact-SQL que se proporciona en Visual Studio Premium para este paso. Para obtener más información, vea Editing Database Scripts and Objects with the Transact-SQL Editor en el sitio web de Microsoft.
Para ver los datos nuevos, ejecute la consulta siguiente:
use SampleGeneratorDB select * from dbo.Addresses
La pestaña Resultados debe mostrar direcciones con valores aleatorios de estado y código postal.
Pasos siguientes
Visual Studio Premium y Visual Studio Ultimate incluyen el generador DateTime, que se puede usar con columnas que tienen una restricción CHECK que necesita que una fecha esté dentro de un intervalo determinado, usando las propiedades Min y Max del generador. En Tutorial: Crear un generador de datos personalizado para una restricción CHECK, creará un generador de datos personalizado para una columna con una restricción CHECK que necesita que una fecha esté dentro de uno de dos intervalos distintos.
Vea también
Tareas
Cómo: Registrar y administrar las extensiones de características
Cómo: Agregar propiedades de entrada a un generador de datos
Cómo: Agregar propiedades de salida a un generador de datos
Cómo: Crear generadores de datos personalizados
Tutorial: Crear y ejecutar un plan de generación de datos
Referencia
Microsoft.Data.Schema.Tools.DataGenerator
Conceptos
Extender las características de base de datos de Visual Studio
Descripción general de la extensibilidad del Generador de datos
Otros recursos
Editing Database Scripts and Objects with the Transact-SQL Editor