Criar recursos de personalizado para projetos de banco de dados
Você pode estender o banco de dados existente tipos de projeto, adicionando seus próprios recursos. Por exemplo, você pode criar um recurso que faz algo sempre que um projeto de banco de dados é carregado ou salvo. Você também pode criar seu próprio provedor de esquema do banco de dados e o suporte de sistema de projeto. No entanto, esse tipo de extensibilidade não é abordado este conteúdo.
Tarefas comuns
Tarefas comuns |
Conteúdo de apoio |
---|---|
Saiba mais sobre os pontos de extensibilidade: Você pode ler sobre o projeto de extensibilidade do projeto de banco de dados. |
|
Crie um recurso de projeto de amostra: Aprenda as etapas necessárias para criar um recurso de projeto personalizado que exibe uma caixa de diálogo quando um projeto de banco de dados é carregado. Se você seguir estas instruções passo a passo, você irá:
|
|
Instale um recurso de projeto personalizado: Depois de criar e construir um recurso de projeto, você deve instalá-lo antes de Visual Studio reconhecerá o proprietário. |
Metas de extensibilidade do projeto
As principais metas para o banco de dados do projeto os recursos de extensibilidade no Visual Studio 2010 são da seguinte maneira:
Expor os principais componentes por meio de interfaces
Essa abordagem mantém o sistema de projeto consistente com o modelo de esquema, usando interfaces em vez de classes abstratas. Espera-se que uma única classe concreta implementar várias interfaces.Recursos são criados pelo Gerenciador de extensibilidade
Recursos são responsáveis por partes principais do sistema, inclusive o Solution Explorer, a visualização Esquema, a atualização de projeto e propriedades do projeto.Recursos podem ser estendidos.
Recursos podem usar o Gerenciador de extensibilidade, XML arquivos, registro ou outras abordagens para fornecer extensibilidade.Os serviços são expostos por meio de sua própria interface.
DataPackageimplementa IServiceProvider. Qualquer cross talk entre os recursos deve ser tratado por nesses níveis de serviço. Você não deve expor o recurso do serviço. Em vez disso, crie uma nova interface, uma classe de wrapper e expor o wrapper do serviço.Unidade de eventos de sistema do projeto
O DataPackage e o ProjectNode() oferecem os eventos que permitem que os recursos orientar o sistema de projeto. Além disso, os recursos podem fornecer eventos por meio de suas interfaces de serviço. Em alguns casos, você pode decidir usar um delegado. Para decidir qual recurso manipula a ação, considere usar uma abordagem de evento onde os recursos podem interagir, com base na prioridade.Não confie na ordenação dos ouvintes
Se a ordem dos ouvintes para um evento for importante, considere a criação de um evento anterior ou posterior, ou considere a adição de uma propriedade de prioridade para a classe derivada de EventArg.
Assemblies de modelo de componente
Os assemblies a seguir fornecem o sistema de projeto de banco de dados em Visual Studio.
Microsoft.VisualStudio.Data.Schema.Package.dll
A base de sistema de projeto e fornece para os eventos e o recurso de inicialização. Isso inclui recursos independente de banco de dados, como, por exemplo, scripts.Microsoft.VisualStudio.Data.Schema.PackageUI.dll
O assembly satélite para o pacote do banco de dados independente.Microsoft.VisualStudio.Data.Schema.Package.SQL.dll
O SQL Server-recursos específicos, editores e janelas de ferramentas Visual Studio.Microsoft.VisualStudio.Data.Schema.Package.SqlUI.dll
O assembly satélite para o SQL Server-recursos específicos, editores e ferramenta windows.
Pontos de extensibilidade
Você pode estender os pontos de acompanhamento do sistema de projeto de banco de dados:
IDatabaseProjectFeature(AllowMultipleExtensions = true)
Esse é o ponto de extensão primária para o sistema de projeto. Recursos são projetados para o projeto de controle e o contribute. Existem várias interfaces que possam implementar opcionalmente: IOleCommandTarget, IDatabaseProjectPriorityCommandTarget, IDatabaseProjectPropertyPageContributor, IDatabaseProjectExtenderContributor<TExtendee>, IDatabaseProjectAddNewItemParticipant, IDatabaseProjectIdleProcessor, and IDatabaseProjectPartialProjectParticipant.IDatabaseProjectBuildActionContributor(AllowMultipleExtensions = false)
Contribui BuildAction seqüências de caracteres para a lista de ações de compilação possíveis no sistema de projeto, por exemplo, o SQL Server sistema de projeto contribui Predeploy e Postdeploy.IDatabaseProjectUserFileContributor(AllowMultipleExtensions = false)
Especifica quais propriedades devem ser roteadas para o arquivo. User.IDatabaseSchemaViewController(AllowMultipleExtensions = false)
Preenche o modo de exibição do esquema e responde a eventos do modo de exibição.IDatabaseProjectFileUpgradeController(AllowMultipleExtensions = false)
Atualiza o arquivo de projeto como um documento XML. Esse processo ocorre antes do Visual Studio sistema de projeto tenta carregar a instância do projeto através da fábrica de projeto.IDatabaseProjectReferenceController(AllowMultipleExtensions = false)
Referências de projeto de controlesIDatabaseProjectPartialProjectParticipant(AllowMultipleExtensions = true)
Permite que um recurso Filtrar os arquivos que não devem ser exportados como um projeto parcial.IDatabaseProjectHelpKeywordProvider
Fornece um projeto sistema ajuda senha é usada quando o cliente pressionar F1.
O ciclo de vida de projeto de banco de dados
Cada arquivo de projeto de banco de dados (.dbproj) contém uma propriedade chamada "dsp" indicando específicos do DatabaseSchemaProvider que lida com este projeto, quando ele é aberto no Visual Studio. O sistema de projeto cria uma extensão manager usando este DSP e de que constrói a todos os colaboradores do sistema de projeto e os recursos do projeto. Cada recurso recebe um evento Initialize para que ele possa inicializar e raiz próprio para o sistema de projeto por ouvir eventos.
Os seguintes eventos são gerados durante o projeto, abrir e fechar e salvar:
NewProjectCreated
Esse evento ocorre quando um projeto é criado. Você pode manipular esse evento para exibir assistentes ou caixas de diálogo de instalação.ProjectOpening
O projeto está abrindo. Você pode manipular esse evento para adicionar todos os serviços para o IDatabaseProjectNode.ProjectOpened
Esse evento ocorre quando todos os serviços foram adicionados e o projeto foi concluída a abertura. No entanto, projeto será ainda não tenha concluído a desserialização de seu estado anterior. O TaskHost e o DataSchemaModel será NULL até o ProjectLoaded evento é enviado.ProjectLoaded
O projeto está totalmente carregado. O TaskHost e DataSchemaModel estão prontas para uso.ProjectClosing
O projeto está fechando. Esta é uma boa oportunidade para manter as informações de estado que está fora do arquivo de projeto.ProjectClosed
O projeto é fechado.ProjectSaving
O projeto está realizando uma operação Salvar operação. Você pode usar isso como uma oportunidade para certificar-se de que o recurso está em um estado de sua persistência sejam armazenados.ProjectSaved
O projeto foi salvo.
Gerenciamento de erro
Cada projeto tem uma ErrorManager. Alguns erros são mantidos no arquivo .dbmdl e outros erros não são. Isso é controlado por meio de AddPersistedCategory classe. Por padrão, essas categorias são persistentes: ModelCategory, ValidationAtBuildCategory, and ValidationOnIdleCategory. Se você adicionar outra categoria persistente, que você terá que lidar com a recarga do projeto e verificar e gerenciar os erros. Lembre-se de que embora o projeto foi fechado, o usuário poderia ter editado o arquivo .dbproj para remover um arquivo para o qual você está relatando um erro. Seria muito confuso para os usuários para relatar um erro no projeto quando este arquivo não existe.
Os objetos de erro do banco de dados são adicionados para o ErrorManager em categorias específicas. A idéia é que os recursos do projeto podem gerenciar a vida útil de seus erros por meio do tempo de vida de sua categoria. Se você estiver preocupado com nomes de categoria em conflito com outros recursos use um GUID como o nome. O ErrorManager define várias categorias internas, incluindo:
DefaultCategory
Essa categoria é destinada para uso erros cujos tempos de vida são iguais para o tempo de vida do projeto. Portanto, por exemplo, erros que ocorrem durante o carregamento do projeto são adicionados a esta categoria.ModelCategory
Esta categoria deve ser usada pelo Gerenciador de esquema quando encontra erros como, por exemplo, erros do analisador.
Cenários relacionados
Criar banco de dados personalizado refatoração tipos ou destinos
Criar e registrar regras adicionais para analisar o código do banco de dados
Gerar dados de teste especializado com um gerador de dados personalizados
Definir condições de personalizado para testes de unidade de banco de dados