Ir para o conteúdo principal

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


  1. ASP.NET - é uma framework de código aberto para criar aplicativos da web na estrutura .NET (dotNET).
  2. EF Core - Entity Framework Core.
  3. SETIC - Superintendência Estadual de Tecnologia da Informação e Comunicação.
  4. SID - Sistema Integrado de Descanso.
  5. SQL Server - é um sistema gerenciador de Banco de dados relacional (SGBD).
  6. TI - Information Technology (Tecnologia da Informação).
  7. 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


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.

5. Referências