Back-End

15 mai, 2018

Usando FluentNHibernate e FluentMigrator com .NET Core

403 visualizações
Publicidade

Vocês tem acompanhado que eu estou ansioso pra usar o NHibernate com .NET Core. Apesar de ele estar disponível desde a versão 5.1.0, que saiu há algumas semanas, ainda não era possível usar o FluentNHibernate e o FluentMigrator, ambos em processo de migração.

No entanto, as migrações de ambos já estão bem adiantadas, faltando apenas alguns detalhes para finalizar. Fui validar se estavam funcionando, e estão. Atualizei meu projeto de exemplo com NH no .NET Core pra utilizar agora o FluentNH e o FluentMigrator, e vou contar aqui o que eu fiz. Lembrando que este projeto começou com o Victor Cavalcante, de quem eu roubei o código descaradamente.

Primeiro precisei adicionar os feeds de pre release dos dois projetos. O FluentMigrator tem um feed que eles mesmos mantêm atualizado, Ele está disponível em:

Já o FluentNHibernate não tem. Eles geram o nupkg durante a build, mas não sobem no MyGet. Então eu fui na última build, baixei o nupkg, que já está com a versão next, que será 2.1.1. Mas como meu pacote não será a versão 2.1.1, eu editei o nupkg e inventei a versão 2.1.1-alpha1, e em seguida, subi pra um feed não oficial do Myget:

Lógico que eu avisei os mantenedores, direto no GitHub, e já pedi pra eles criarem um feed de pre release oficial. Quando eles fizerem isso, eu vou remover o meu feed.

Feito isso, coloquei as referências dos feeds no NuGet.config, instalei o FluentNH e atualizei o código para usá-lo (criei a classe de mapeamento e alterei a configuração). O uso foi absolutamente idêntico ao uso com .NET Framework. Não tive nenhuma surpresa aí. Removi os arquivos xml de configuração que estavam no projeto, rodei, e funcionou.

O FluentMigrator foi mais complicado. Não tem muitos docs, porque é uma ferramenta e uma lib, e eles têm um runner independente, feito para rodar com .NET Framework. A forma de fazer isso no .NET Core até a versão 2.0 é com .NET CLI Tools References (no 2.1 será com global tools). Achei uma tool dessa no feed, e acrescentei no csproj:

<DotNetCliToolReference Include="FluentMigrator.DotNet.Cli" Version="2.0.0-beta0240" />

Acrescentei a dependência também para o pacote FluentMigrator.Core, criei uma migration e rodei. O comando foi o seguinte:

dotnet fm migrate --connection 'string conexao' --processor SqlServer2016 --assembly .\bin\Debug\netcoreapp2.0\migrations.dll

E falhou! Deu um erro ao tentar carregar o NHibernate. Oras, mas por que o FluentMigrator quer carregar o NH?

Não me importa. É um bug, não perdi tempo com isso. Criei outro projeto .NET Core 2.0 e movi as dependências de lib e tool pra lá, assim como o código. Rodei novamente, e funcionou.

Conclusão

Tudo funcionou. No estado que está me parece que já dá pra começar projetos com essa configuração. Preciso validar cenários mais complexos de mapeamento e migrations, mas até agora tudo indica que o caminho é esse. Imagino que em algumas semanas teremos uma release estável.

Lembrando que o código está disponível no GitHub: giggio/exemplonhdnetstandard2.

***

Este artigo foi produzido em parceria com a Lambda3. Leia outros conteúdos no blog da empresa: blog.lambda3.com.br