Integração .Net + PostgreSQL
Data de elaboração |
26/04/2022 |
---|---|
Responsável pelo estudo |
João Pedro Rocha Brito (Assessor) |
Equipe do estudo |
João Pedro Rocha Brito (Assessor) José Lucas da Silva Costa (Analista de Desenvolvimento Full-Stack) Jônatas Neves Legal (Técnico emTecnologia da Informação e Comunicação) |
Alvo | Sistemas que utilizam .NET Framework. |
Origem |
Implementação: Integração .Net + PostgreSQL. |
Objetivo |
Integrar o .NET com o sistema gerenciador de banco de dados PostgreSQL. |
Documentação Correlata | https://learn.microsoft.com/pt-br/ef/core/providers/?tabs=dotnet-core-cli |
Observações |
Sem observações. |
1. Glossário de Termos
- ASP.NET - é uma framework de código aberto para criar aplicativos da web na estrutura .NET (dotNET).
- EF Core - Entity Framework Core.
- SETIC - Superintendência Estadual de Tecnologia da Informação e Comunicação.
- SID - Sistema Integrado de Descanso.
- SQL Server - é um sistema gerenciador de Banco de dados relacional (SGBD).
- TI - Information Technology (Tecnologia da Informação).
- PostgreSQL - é um sistema gerenciador de banco de dados objeto-relacional baseado no POSTGRES.
2. Introdução
Devido a complexidade de adoções de licenças de ferramentas pelo Governo, a solução dos profissionais de TI é buscar ferramentas que sejam boas e gratuitas para utilizações robustas, devido a isso o uso do banco de dados do Postgress é recomendado devido suas praticidades. O PostgreSQL é um banco de dados de código aberto mais avançado, oferece muitas vantagens para a SETIC do que outros sistemas de banco de dados. Ele também está disponível para quase todos os sistemas operacionais com a versão estável mais recente. Por fim a intenção deste estudo é integrar esse banco de dados junto a tecnologia de desenvolvimento do C#/.NET.
3. Desenvolvimento - Integração .Net + PostgreSQL
Basicamente a integração do ..NET com o PostgreSQL é intermediada pelo EF Core (Entity Framework Core), de acordo com o site oficial da microsoft, o conceito de Entity Framework Core é disponibilizado a seguir:
O EF (Entity Framework) Core é uma versão leve, extensível, de software livre e multiplataforma da popular tecnologia de acesso a dados do Entity Framework.
EF Core pode servir como um mapeador relacional de objeto (O/RM), que:
- Permite que os desenvolvedores do .NET trabalhem com um banco de dados usando objetos .NET.
- Elimina a necessidade da maior parte do código de acesso a dados que normalmente precisa ser gravado.
O EF Core é compatível com vários mecanismos de banco de dados, consulte detalhes em Provedores de Banco de Dados.
Fonte: Microsoft
Para esta integração os provedores de banco são pontes para outros tipos de bancos dados. A microsoft também aborda o conceito de provedores para o banco de dados, esses provedores fornecem conectividade com a tecnologia .NET Core para sua integração.
O próprio site de documentação do PostgreSQL aborda como é feita a configuração desses provedores, vejamos:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.1.3" />
</ItemGroup>
</Project>
Fonte: Npgsql
Após a instalação e configuração do provedor que dá acesso é necessário a criação do contexto que representará o modelo de negócio do projeto por meio da classes, reparemos:
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
namespace ConsoleApp.PostgreSQL
{
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseNpgsql("Host=my_host;Database=my_db;Username=my_user;Password=my_pw");
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
}
Fonte: Npgsql
Inclusive para o ambiente da SETIC, podemos citar até mesmo uma configuração específica de aplicativos ASP.NET Core, exemplo:
public void ConfigureServices(IServiceCollection services)
{
// Other DI initializations
services.AddDbContext<BloggingContext>(options =>
options.UseNpgsql(Configuration.GetConnectionString("BloggingContext")));
}
Fonte: Npgsql
3.1. Possíveis problemas
Não existem problemas com relação a tecnologia propriamente dita, mas há cenários em que talvez um novo ambiente com esse novo banco de dados poderá promover algumas dificuldades, o ponto inicial é mão de obra empregada na SETIC, a maioria dos colaboradores tem bastante familiaridade somente com o banco de dados SQL Server, o que poderá demandar um treinamento específico ou algo relacionado. Outro ponto crucial é que a infraestrutura para suportar esse novo banco de dados tem uma configuração específica, mas a boa notícia é que o time de banco de dados já disponibiliza fácil acesso a esse banco para o desenvolvedores.
3.2. Valor agregado
A utilização de um banco de dados cuja licença seja livre é de suma importância para a SETIC, pois evita obstáculos burocráticos com relação a licitações e aquisições, ao mesmo tempo é capaz de prover economia aos cofres públicos. A licença do PostgreSQL permite que os desenvolvedores operem um ou mais bancos de dados sem custo de licenciamento em seus sistemas. Devemos considerar também que a equipe principal do PostgreSQL também lança atualizações frequentes que aprimoram muito os recursos do banco de dados.
4. Conclusão
O presente ESTUDO TÉCNICO PRELIMINAR, elaborado pelos integrantes TÉCNICOS do time TITÃS, considerando a análise dos desafios técnicos envolvidos e citados, conclui pela VIABILIDADE DE MIGRAÇÃO DO BANCO SQL SERVER PARA O POSTGRESQL DE MODO CRITERIOSO, uma vez que foram considerados os potenciais benefícios em termos de eficiência e também os problemas envolvidos. Em complemento, os contratempos identificados são administráveis, pelo que RECOMENDAMOS o prosseguimento da demanda. Ressalva-se que o ideal é que novos projetos comecem a operar esse tipo de banco de dados, evitando a alocação de mão de obra em migração de projetos legados.