Data de elaboração | 26/04/2022 |
Responsável pelo estudo | João Pedro Rocha Brito (Assessor) |
Equipe do estudo | 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 | -/- |
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.
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.
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."
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>
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; }
}
}
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")));
}
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.
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.
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.
https://docs.microsoft.com/pt-br/ef/core/
https://learn.microsoft.com/pt-br/ef/core/providers/?tabs=dotnet-core-cli