Em 2016 o Felipe Cecon escrever o post C#: Usando Dapper com FluentMap, Linq e Lambda para consultas, onde ele ensina como usar o Dapper com FluentMap usando o .NET Framework 4.5.1, possibilitando o uso de Linq e Lambda dentro do projeto.
Hoje, com o .NET Core em evidência, resolvi criar um novo projeto me inspirando no post dele, onde é possível perceber alguma facilidades e restrições quando se usa um Micro-ORM como o Dapper. E o FluentMap vai ajudar a escrever menos código, principalmente queries em SQL ANSI.
Eu uso uma extensão do VS Code que facilita bastante a criação de arquivos de solução e projetos, é a vscode-solution-explorer do Fernando Escobar.
Eu vou fornecer os comandos, mas se quiser, conheça e use a extensão para agilizar a criação da estrutura pelo VS Code.
O nome da solução será CSharpDapperAndFluentMap.sln e ficará armazenada na pasta C:\GitHub, mas sinta-se a vontade para usar o seu próprio diretório.
dotnet "new" "sln" "-n" "CSharpDapperAndFluentMap" "-o" "c:\GitHub\CSharpDapperAndFluentMap"
Adicione na raiz do projeto o arquivo global.json, para definir a versão do .NET Core:
{ "sdk": { "version": "2.2.204" } }
dotnet "new" "classlib" "-lang" "C#" "-n" "CSharpDapperAndFluentMap.Data" "-o" "src\CSharpDapperAndFluentMap.Data"
dotnet "sln" "c:\GitHub\CSharpDapperAndFluentMap\CSharpDapperAndFluentMap.sln" "add" "c:\GitHub\CSharpDapperAndFluentMap\src\CSharpDapperAndFluentMap.Data\CSharpDapperAndFluentMap.Data.csproj"
dotnet "new" "classlib" "-lang" "C#" "-n" "CSharpDapperAndFluentMap.Domain" "-o" "src\CSharpDapperAndFluentMap.Domain"
dotnet "sln" "c:\GitHub\CSharpDapperAndFluentMap\CSharpDapperAndFluentMap.sln" "add" "c:\GitHub\CSharpDapperAndFluentMap\src\CSharpDapperAndFluentMap.Domain\CSharpDapperAndFluentMap.Domain.csproj"
dotnet "new" "console" "-lang" "C#" "-n" "CSharpDapperAndFluentMap.Prompt" "-o" "src/CSharpDapperAndFluentMap.Prompt"
dotnet "sln" "c:\GitHub\CSharpDapperAndFluentMap\CSharpDapperAndFluentMap.sln" "add" "c:\GitHub\CSharpDapperAndFluentMap\src\CSharpDapperAndFluentMap.Prompt\CSharpDapperAndFluentMap.Prompt.csproj"
Use o arquivo CreateDB.sql para criar o banco de dados com as tabelas e os dados de exemplo.
Crie no projeto de domínio, na pasta Entities, as classes:
- Entity
- Category
- Person
- Project
- PersonProject
- Priority
- Ticket
Instale os pacotes NuGet no projeto de dados:
- Dapper
- Dapper.FluentMap
- Dommel
- Dapper.FluentMap.Dommel
- Microsoft.Extensions.Configuration.FileExtensions
- Microsoft.Extensions.Configuration.Json
No projeto de dados adicione o arquivo appsettings.Development.json, que terá a Connections string.
No projeto dados adicione uma referência ao projeto de domínio.
dotnet "add" "c:\GitHub\CSharpDapperAndFluentMap\src\CSharpDapperAndFluentMap.Data\CSharpDapperAndFluentMap.Data.csproj" "reference" "c:\GitHub\CSharpDapperAndFluentMap\src\CSharpDapperAndFluentMap.Domain\CSharpDapperAndFluentMap.Domain.csproj"
Na pasta Repositories adicione a classe Repository. Na pasta Queries adicione a classe Query.
Adicione as classes específicas:
- CategoryQuery
- CategoryRepository
- PersonQuery
- PersonRepository
- ProjectQuery
- ProjectRepository
- PersonProjectQuery
- PersonProjectRepository
- PriorityQuery
- PriorityRepository
- TicketQuery
- TicketRepository
Crie uma pasta chamada Mappings no projeto de dados, e inclua os mapeamentos:
- CategoryMap
- PersonMap
- ProjectMap
- PersonProjectMap
- PriorityMap
- TicketMap
Crie a classe RegisterMappings na raiz do projeto de dados.
Adicione referência ao projeto de dados e domínio no projeto de console.
Adicione uma chamada ao método Register da classe RegisterMappings no método Main da classe Program.