Crear características personalizadas para los proyectos de base de datos
Puede extender los tipos de proyectos de base de datos existentes agregando sus propias características. Por ejemplo, puede crear una característica que haga algo cada vez que se carga o se guarda un proyecto de base de datos. También puede crear su propio proveedor de esquemas de base de datos y el sistema de proyectos auxiliar. Sin embargo, ese tipo de extensibilidad no se trata en el presente contenido.
Tareas comunes
Tareas comunes |
Contenido adicional |
---|---|
Obtenga más información sobre los puntos de extensibilidad: puede leer sobre el diseño de extensibilidad de los proyectos de base de datos. |
|
Cree una característica de proyecto de ejemplo: obtenga información sobre los pasos necesarios para crear una característica de proyecto personalizada que muestre un cuadro de diálogo al cargar un proyecto de base de datos. Si sigue estos tutoriales, hará lo siguiente:
|
|
Instale una característica de proyecto personalizada: después de crear y compilar una característica de proyecto, debe instalarlo para que Visual Studio lo reconozca. |
Objetivos de la extensibilidad de proyectos
Los objetivos principales de las características de extensibilidad de proyectos de base de datos de Visual Studio 2010 son los siguientes:
Exponer los componentes principales por medio de interfaces
Este enfoque mantiene la coherencia del sistema de proyectos con el modelo de esquema al utilizar interfaces en lugar de clases abstractas. Se espera que una clase concreta única implemente muchas interfaces.El administrador de extensibilidad crea las características
Las características son responsables de las partes principales del sistema, incluidos el Explorador de soluciones, la vista de esquema, la actualización del proyecto y las propiedades del proyecto.Las características se pueden extender
Las características pueden utilizar el administrador de extensibilidad, los archivos de XML, el Registro u otros enfoques para proporcionar esa extensibilidad.Los servicios se exponen por medio de su propia interfaz
DataPackage implementa IServiceProvider. En estos niveles, cualquier interferencia entre características se debería controlar por medio de los servicios. No debería exponer su característica como servicio. En su lugar, cree una nueva interfaz, una clase contenedora y, a continuación, exponga el contenedor como servicio.Los eventos controlan el sistema de proyectos
DataPackage y ProjectNode() ofrecen eventos que permiten que las características controlen el sistema de proyectos. Además, las características pueden proporcionar eventos a través de sus interfaces de servicio. En algunos casos, quizás decida utilizar un delegado. Para decidir qué característica controla la acción, considere la posibilidad de utilizar un enfoque de evento donde las características puedan interactuar, según la prioridad.No confíe en el orden de los agentes de escucha
Si el orden de los agentes de escucha de un evento es importante, considere la posibilidad de crear un evento Pre o Post o de agregar una propiedad de prioridad a la clase derivada de EventArg.
Ensamblados del modelo de componentes
Los siguientes ensamblados constituyen el sistema de proyectos de base de datos de Visual Studio.
Microsoft.VisualStudio.Data.Schema.Package.dll
El sistema de proyectos base facilita el arranque de características y la generación de eventos. Eso incluye características válidas de base de datos, como los scripts.Microsoft.VisualStudio.Data.Schema.PackageUI.dll
El ensamblado satélite del paquete válido de base de datos.Microsoft.VisualStudio.Data.Schema.Package.Sql.dll
Las características específicas de SQL Server, los editores y las ventanas de herramientas de Visual Studio.Microsoft.VisualStudio.Data.Schema.Package.SqlUI.dll
El ensamblado satélite de las características específicas de SQL Server, los editores y las ventanas de herramientas.
Puntos de extensibilidad
Es posible extender los siguientes puntos del sistema de proyectos de base de datos:
IDatabaseProjectFeature (AllowMultipleExtensions =true)
Éste es el punto de extensión principal del sistema de proyectos. Las características están diseñadas para controlar el proyecto y contribuir. Hay varias interfaces que pueden implementar de forma opcional: IOleCommandTarget, IDatabaseProjectPriorityCommandTarget, IDatabaseProjectPropertyPageContributor, IDatabaseProjectExtenderContributor<TExtendee>, IDatabaseProjectAddNewItemParticipant, IDatabaseProjectIdleProcessor e IDatabaseProjectPartialProjectParticipant.IDatabaseProjectBuildActionContributor (AllowMultipleExtensions =false)
Aporta cadenas BuildAction a la lista de posibles acciones de compilación del sistema de proyectos. Por ejemplo, el sistema de proyectos de SQL Server aporta Predeploy y Postdeploy.IDatabaseProjectUserFileContributor (AllowMultipleExtensions =false)
Especifica qué propiedades se deberían enrutar al archivo .user.IDatabaseSchemaViewController (AllowMultipleExtensions =false)
Rellena la vista de esquema y responde a los eventos de esa vista.IDatabaseProjectFileUpgradeController (AllowMultipleExtensions =false)
Actualiza el archivo de proyecto como un documento XML. Este proceso se produce antes de que el sistema de proyectos de Visual Studio intente cargar la instancia del proyecto por medio del generador de proyectos.IDatabaseProjectReferenceController (AllowMultipleExtensions = false)
Controla las referencias del proyecto.IDatabaseProjectPartialProjectParticipant (AllowMultipleExtensions = true)
Permite que una característica filtre los archivos que no se deberían exportar como un proyecto parcial.IDatabaseProjectHelpKeywordProvider
Proporciona la palabra clave Help del sistema de proyectos que se utiliza cuando el cliente presiona F1.
Ciclo de vida del proyecto de base de datos
Cada archivo de proyecto de base de datos (.dbproj) contiene una propiedad denominada "DSP" que indica el DatabaseSchemaProvider concreto que controla este proyecto cuando se abre en Visual Studio. El sistema de proyectos crea un administrador de extensión mediante esta DSP y a partir de eso construye todos los colaboradores del sistema de proyectos y las características de proyecto. Cada característica recibe un evento Initialize para que se pueda inicializar y colocar en el sistema de proyectos al escuchar a los eventos.
Los siguientes eventos se producen durante la apertura o el cierre y el guardado del proyecto:
NewProjectCreated
Este evento se produce cuando se crea un proyecto por primera vez. Puede controlar este evento para que muestre asistentes o cuadros de diálogo de instalación.ProjectOpening
El proyecto se está abriendo. Puede controlar este evento para que agregue cualquier servicio a IDatabaseProjectNode.ProjectOpened
Este evento se produce cuando se han agregado todos los servicios y el proyecto ha terminado de abrirse. Sin embargo, aún no habrá terminado de deserializar su estado anterior. TaskHost y DataSchemaModel serán NULL hasta que se envíe el evento ProjectLoaded.ProjectLoaded
El proyecto está totalmente cargado. TaskHost y DataSchemaModel están listas para su uso.ProjectClosing
El proyecto se está cerrando. Ésta es una buena oportunidad de conservar cualquier información de estado que esté fuera del archivo de proyecto.ProjectClosed
El proyecto está cerrado.ProjectSaving
El proyecto está realizando una operación de guardado. Puede aprovechar la oportunidad para asegurarse de que su característica está en un estado que permite el almacenamiento de su persistencia.ProjectSaved
El proyecto se ha guardado.
Administración de errores
Cada proyecto tiene un ErrorManager. Algunos errores se conservan en el archivo .dbmdl y otros no. Esto se controla por medio de la clase AddPersistedCategory. De forma predeterminada, se conservan estas categorías: ModelCategory, ValidationAtBuildCategory y ValidationOnIdleCategory. Si agrega otra categoría conservada, tendrá que controlar la recarga del proyecto y comprobar y administrar sus errores. Recuerde que aunque se cerró el proyecto, el usuario podría haber editado el archivo .dbproj para quitar un archivo que tuviera un error. Sería muy confuso para los usuarios notificar un error en el proyecto si tal archivo no existiera.
Los objetos de error de base de datos se agregan a ErrorManager en categorías concretas. La idea es que las características de proyecto pueden administrar la duración de sus errores por medio de la duración de su categoría. Si le preocupa que los nombres de categoría estén en conflicto con otras características, utilice un GUID como nombre. ErrorManager define varias categorías integradas que incluyen:
DefaultCategory
Esta categoría está diseñada para usarla con errores cuyas duraciones sean iguales a la duración del proyecto. Por tanto, por ejemplo, los errores que se producen durante la carga del proyecto se agregan a esta categoría.ModelCategory
El administrador de esquema debe utilizar esta categoría cuando detecte errores, por ejemplo del analizador.
Escenarios relacionados
Crear tipos de refactorización de base de datos personalizados o destinos
Crear y registrar reglas adicionales para analizar el código de base de datos
Generar datos de pruebas especializados con un generador de datos personalizado
Definir condiciones personalizadas para pruebas unitarias de base de datos
Vea también
Conceptos
Extender las características de base de datos de Visual Studio