Automatizando a execução de scripts Sql Server com .Net Core 2.2 e o DbUp
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:
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.
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.
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.