Automatizando a execução de scripts Sql Server com .Net Core 2.2 e o DbUp

Rodolfo dos Santos Pinto
May 26 · 4 min read

Introdução

Nesses artigos vamos demonstrar como realizar a automação e versionamento dos seus scripts Sql Server. Fazendo com que a aplicação atualize a base sempre que um script novo for criado.

A maioria dos Devs sabem que rotinas de atualização de base de dados é um pouco complicada e sempre tem aquela dúvida. “Será que o script foi aplicado corretamente? Será que os scripts falharam?”

Pesquisando um pouco a respeito encontrei uma biblioteca que pode nos ajudar a solucionar esse problema.

O DbUp nos auxilia no Deploy dos scripts SqlServer, em uma base de dados, basicamente, versionamos os scripts e quando a aplicação é executada pela primeira vez, ele verifica os scripts já criados e os scripts que irão ser executados. O único detalhe é que os .sql tem que ser versionado junto ao projeto.

Mão na Massa

Agora vamos testar o DbUp, o código fonte será disponibilizado no GitHub. Vamos criar um projeto Web no VS2017.

Com o Projeto já criado vamos instalar o Nuget do DbUp, rodando o seguinte comando:

Install-Package DbUp

Agora vamos criar uma pasta na Solution, chamada SqlServer e criar uma classe dentro dela chamada SqlServerUpdate, e por fim adicionar o seguinte código, não esquece de importar a dll do dbup.

Repare que no Upgrader o DbUp usa a connection string definida no projeto, em seguida captura os scripts e por fim são executados na base definida anteriormente. Caso ocorrer algum problema será emitido uma Exception.

Agora só adicionar a chamada do código na classe Startup.cs para o comando ser executado toda vez que a aplicação for iniciada.

Testes

Agora vamos testar se tudo isso realmente funciona, vou criar 5 scripts 2 de criação de tabela, 2 de Inserção nas tabelas criadas e 1 realizando uma alteração em uma das tabelas. Note que o banco TesteDbUp está vazio.

Banco de Dados Vazio

Inserimos os scripts para serem executados, vamos seleciona-los e clicar com o botão direito em propriedades e alterar a ação de compilação para Recursos Inserido ou “ Embedded Resources”.

Agora vamos iniciar a aplicação, para verificar se os scripts foram executados com sucesso.

Scripts executados com successo

Podemos verificar que o DbUp criou uma tabela chamada SchemaVersions, é nessa tabela que é feito o controle de quais scripts foram executados.

Agora como teste final vamos fazer o update de uma das tabelas, será adicionado mais uma coluna na MarvelHero, mas nesse script irá conter um erro para visualizar o resultado.

Após a execução, como o nome da tabela não existe, é retornado um erro ao inciar a aplicação. Note que o script com erro não foi adicionado na SchemaVersions, pois ela só armazena os scripts que já foram executado na base de dados.

Vamos ajustar o script e visualizar o resultado.

Scripts executados com sucesso e aplicação no AR.

Observação: Utilizamos scripts simples para realizar os testes, mas para fazer rollbacks é necessário codifica-los nos scripts que serão inseridos no sistema.

Training Center

Conectamos pessoas que querem aprender algo relacionado a desenvolvimento de software com gente que pode guiá-las.

Rodolfo dos Santos Pinto

Written by

.NET Foundation | .Net Developer | Writer | Technology for Love | #Core #DevOps #Azure #NetCore

Training Center

Conectamos pessoas que querem aprender algo relacionado a desenvolvimento de software com gente que pode guiá-las.