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 umas semanas atrás, 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 pra 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 mantem atualizado, ele está em:
https://www.myget.org/F/fluent-migrator/api/v3/index.json

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. Em seguida subi pra um feed não oficial do Myget, em:
https://www.myget.org/F/fluentnh-nonofficial/api/v3/index.json

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 pra usá-lo (criei a classe de mapeamento e alterei a configuração). O uso foi absolutamente idêntico ao do 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 tem um runner independente, feito pra 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 pro pacote FluentMigrator.Core, criei uma migration e rodei. O comando foi:

 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 porque 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.

Concluindo: 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.

Giovanni Bassi

Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.