Domine o EF Core: Guia Prático para Acesso a Dados

O Entity Framework Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. (EF Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.) é como aquela varinha mágica dos filmes de fantasia: você faz suas entidades em C# e, quase por encanto, seus dados acabam salvos no banco de dados! É um ORM (Object-Relational Mapping📊 Raw SQL no EF Core: Quando o ORM Não Basta!📊 Raw SQL no EF Core: Quando o ORM Não Basta!Descubra como aplicar Raw SQL no EF Core para consultas avançadas e stored procedures, garantindo performance, segurança e mapeamento preciso dos dados.) que elimina a necessidade de escrever SQL na mão📊 Raw SQL no EF Core: Quando o ORM Não Basta!📊 Raw SQL no EF Core: Quando o ORM Não Basta!Descubra como aplicar Raw SQL no EF Core para consultas avançadas e stored procedures, garantindo performance, segurança e mapeamento preciso dos dados. para grande parte das operações, economizando tempo e evitando muitos erros. Além disso, o EF Core deixa seu código mais “Clean”, facilitando a manutenção e a evolução do seu projeto.

Imagine poder manipular um banco de dados sem escrever SQL📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias. manualmente! O EF Core faz exatamente isso: transforma tabelas em classes🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara., registros em objetos e queries em LINQ. É como ter um tradutor automático entre seu código C# e o banco de dados.

Neste artigo, vamos mergulhar no essencial sobre esse recurso📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. incrível que é o EF Core, entendendo como ele funciona, como configurá-lo e até fazendo um pequeno CRUD em C#. Além disso, você vai aprender como o EF Core:

📌 Índice🔗

O que é um ORM?🔗

ORM📊 Raw SQL no EF Core: Quando o ORM Não Basta!📊 Raw SQL no EF Core: Quando o ORM Não Basta!Descubra como aplicar Raw SQL no EF Core para consultas avançadas e stored procedures, garantindo performance, segurança e mapeamento preciso dos dados. (Mapeamento Objeto-Relacional📊 Raw SQL no EF Core: Quando o ORM Não Basta!📊 Raw SQL no EF Core: Quando o ORM Não Basta!Descubra como aplicar Raw SQL no EF Core para consultas avançadas e stored procedures, garantindo performance, segurança e mapeamento preciso dos dados.) converte dados entre sistemas incompatíveis. Veja a diferença:

// SEM ORM (ADO.NET tradicional):
using (var connection = new SqlConnection(connectionString))
{
    var command = new SqlCommand("SELECT * FROM Produtos WHERE Preco > @preco", connection);
    command.Parameters.AddWithValue("@preco", 100);
    // ... abre conexão, executa, transforma dados manualmente
}
// COM EF Core:
var produtosCaros = await _context.Produtos
    .Where(p => p.Preco > 100)
    .ToListAsync();

Vantagens:

O que é e por que usar EF Core?🔗

O EF Core é um ORM que faz a ponte entre o mundo orientado a objetos do C# e o mundo relacional do banco de dados (SQL Server🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real., MySQL, PostgreSQL etc.). Em vez de escrever queries SQL direto, você manipula coleções de objetos dentro do seu código - e o EF Core se encarrega de gerar as instruções SQL necessárias.

Por que isso é interessante?

Configuração e Dependências🔗

Para começar a usar o EF Core, você precisa adicionar📦 List<T>: Dinamismo além dos Arrays!📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. o pacote Microsoft.EntityFrameworkCore e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. também o pacote específico do provedor de banco de dados que vai usar (por exemplo, Microsoft.EntityFrameworkCore.SqlServer). No arquivo .csproj ou via CLI do .NET:

dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer

Ou, se você estiver usando o Visual Studio, pode instalar via Gerenciador de Pacotes📦 Crie um Pacote NuGet: Compartilhe seu Código!📦 Crie um Pacote NuGet: Compartilhe seu Código!Aprenda a empacotar, configurar e publicar pacotes NuGet em C# passo a passo, com dicas profissionais e práticas recomendadas para seu projeto. NuGet.

Em seguida, você precisa informar a connection string📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance. do seu banco de dados. Geralmente, isso é feito nas configurações da sua aplicação (por exemplo, em appsettings.json📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável. se estiver no ASP.NET Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.).

Criando seu DbContext🔗

O DbContext em EF Core é a classe que representa uma “ponte” entre as entidades (classes🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. C#) e as tabelas do banco. É aqui que configuramos detalhes, nome da connection string, entre outros.

Exemplo simplificado de DbContext:

using Microsoft.EntityFrameworkCore;
public class MeuAppContext : DbContext
{
    // Geralmente passamos a connection string para o construtor.
    public MeuAppContext(DbContextOptions<MeuAppContext> options)
        : base(options)
    {
    }
    // Propriedades que representam a "coleção" de entidades no BD
    public DbSet<Produto> Produtos { get; set; }
}

Se você estiver em um projeto de Console ou WPF, basta configurar as opções no construtor. Em um projeto ASP.NET Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real., isso costuma ser feito no Program.cs ou Startup.cs, chamando algo como:

services.AddDbContext<MeuAppContext>(options =>
    options.UseSqlServer(configuration.GetConnectionString("MinhaConnection")));

Entidades (Models) e Mapeamento🔗

As entidades são suas classes do dia a dia, como “Produto”, “Cliente”, “Pedido” e por aí vai. Cada propriedade vai se tornar uma coluna do seu banco. O EF Core faz um mapeamento automático🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. (chamado Convention) com base nos nomes das propriedades e tipos. Se precisar de algo mais avançado, você pode usar Data Annotations ou a Fluent API🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. no OnModelCreating do DbContext.

Exemplo de uma classe “Produto🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados.”:

public class Produto
{
    public int Id { get; set; }
    public string Nome { get; set; }
    public decimal Preco { get; set; }
    public bool EmEstoque { get; set; }
}

Por convenção, a propriedade⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. chamada “Id” (ou “<NomeDaClasse>Id”) é reconhecida como a chave primária.

Operações Básicas (CRUD)🔗

Vamos ver como inserir, consultar🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio., atualizar e remover dados usando o EF Core. Suponha que já tenhamos uma instância do MeuAppContext configurada.

Inserir (Create)

using (var contexto = new MeuAppContext(options))
{
    var novoProduto = new Produto
    {
        Nome = "Teclado Mecânico",
        Preco = 200.99m,
        EmEstoque = true
    };
    contexto.Produtos.Add(novoProduto);
    contexto.SaveChanges();
}

Aqui, chamamos Add📦 List<T>: Dinamismo além dos Arrays!📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! inserir o objeto no banco e SaveChanges() efetiva a transação.

Consultar (Read)

using (var contexto = new MeuAppContext(options))
{
    // Busca todos os produtos
    var produtos = contexto.Produtos.ToList();
    // Filtra por nome ou qualquer outra condição
    var teclados = contexto.Produtos
                           .Where(p => p.Nome.Contains("Teclado"))
                           .ToList();
}

Dica: Em projetos maiores, usar consultas🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. com Where🔍 LINQ Básico: Filtre Dados como um Garimpeiro Digital!🔍 LINQ Básico: Filtre Dados como um Garimpeiro Digital!Descubra como o LINQ facilita o processamento de dados em C#. Filtre, ordene e transforme coleções com precisão e eficiência no seu código., Select🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio., OrderBy🔍 LINQ Básico: Filtre Dados como um Garimpeiro Digital!🔍 LINQ Básico: Filtre Dados como um Garimpeiro Digital!Descubra como o LINQ facilita o processamento de dados em C#. Filtre, ordene e transforme coleções com precisão e eficiência no seu código. etc., torna o código limpo, mas📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. lembre-se de não exagerar na complexidade dentro da mesma query.

Atualizar (Update)

using (var contexto = new MeuAppContext(options))
{
    var produtoExistente = contexto.Produtos.FirstOrDefault(p => p.Id == 1);
    if (produtoExistente != null)
    {
        produtoExistente.Preco = 180.00m;
        contexto.SaveChanges();
    }
}

Depois que o objeto é carregado pelo contexto, basta alterar as propriedades⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. que deseja atualizar e chamar SaveChanges().

Excluir (Delete)

using (var contexto = new MeuAppContext(options))
{
    var produtoParaExcluir = contexto.Produtos.FirstOrDefault(p => p.Id == 2);
    if (produtoParaExcluir != null)
    {
        contexto.Produtos.Remove(produtoParaExcluir);
        contexto.SaveChanges();
    }
}

Opcionalmente, podem usar Attach ou Entry se o objeto estiver fora do escopo🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. atual do contexto, mas o conceito é similar.

LINQ: Consultas Fortemente Tipadas🔗

// Filtro + Ordenação + Paginação
var produtosPage = await _context.Produtos
    .Where(p => p.Preco > 500)
    .OrderByDescending(p => p.DataCadastro)
    .Skip((pagina - 1) * 10)
    .Take(10)
    .ToListAsync();
// JOIN implícito
var produtosComCategoria = await _context.Produtos
    .Include(p => p.Categoria)
    .Select(p => new { p.Nome, Categoria = p.Categoria.Nome })
    .ToListAsync();

Migrations: Versionando seu Banco🔗

# Terminal
dotnet ef migrations add InicialCreate
dotnet ef database update

Evolução segura🛡️ Segurança em SignalR: Autenticação e Autorização!🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real.:

1. Cria arquivos de migração🔄 Migrations: Evolua seu Banco sem Perder Dados!🔄 Migrations: Evolua seu Banco sem Perder Dados!Aprenda como aplicar migrations com segurança usando Entity Framework Core para evoluir seu banco de dados sem perder dados. (timestamped)

2. Mantém histórico de alterações

3. Permite rollback com dotnet ef database update📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias. NomeDaMigraçãoAnterior

Relacionamentos 1:N e N:N🔗

1:N (Categoria → Produtos🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio.):

public class Categoria
{
    public int Id { get; set; }
    public string Nome { get; set; }
    public ICollection<Produto> Produtos { get; set; }
}
// Na configuração:
modelBuilder.Entity<Produto>()
    .HasOne(p => p.Categoria)
    .WithMany(c => c.Produtos);

N:N (Produto🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. ↔ Tag):

modelBuilder.Entity<Produto>()
    .HasMany(p => p.Tags)
    .WithMany(t => t.Produtos)
    .UsingEntity(j => j.ToTable("ProdutoTags"));

Performance: Evitando Armadilhas🔗

Problema🤝 GitHub Básico: Versionamento para Iniciantes!🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. Comum: SELECT🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. N+1

// RUIM: 1 query para produtos + N queries para categorias
var produtos = _context.Produtos.ToList();
foreach (var p in produtos)
{
    var categoria = _context.Categorias.Find(p.CategoriaId);
}
// SOLUÇÃO: Eager Loading
var produtos = _context.Produtos.Include(p => p.Categoria).ToList();

Dicas🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. de Ouro:

Raw SQL: Quando o ORM Não Basta🔗

var produtos = await _context.Produtos
    .FromSqlRaw("SELECT * FROM Produtos WHERE Nome LIKE '%{0}%'", termoBusca)
    .ToListAsync();
// Para procedures armazenadas
var resultado = await _context.Database
    .ExecuteSqlRawAsync("EXEC AtualizarEstoque @produtoId, @quantidade",
        parameters: new[] { produtoIdParam, quantidadeParam });

Projeto Prático: Sistema de Estoque🔗

Requisitos:

1. Cadastro de produtos🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. com categorias

2. Controle de estoque com entradas/saídas

3. Relatório de produtos🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. abaixo do estoque mínimo

Passo a Passo:

1. Criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. entidades Produto🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados., Categoria, MovimentacaoEstoque

2. Configurar relacionamentos no DbContext

3. Implementar serviços com métodos🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. como RegistrarEntradaEstoque

4. Criar migration🔄 Migrations: Evolua seu Banco sem Perder Dados!🔄 Migrations: Evolua seu Banco sem Perder Dados!Aprenda como aplicar migrations com segurança usando Entity Framework Core para evoluir seu banco de dados sem perder dados. inicial

5. Implementar interface📜 Interfaces: Contratos que Garantem a Ordem no Universo OOP!📜 Interfaces: Contratos que Garantem a Ordem no Universo OOP!Descubra como as interfaces em C# funcionam como contratos que garantem implementações flexíveis e robustas, facilitando o design e testes de sistemas. simples de console

// Exemplo de query complexa
var produtosBaixoEstoque = await _context.Produtos
    .Where(p => p.EstoqueAtual < p.EstoqueMinimo)
    .Include(p => p.Categoria)
    .OrderBy(p => p.Nome)
    .ToListAsync();

Resultado: Sistema completo com menos de 200 linhas de código!

Considerações Finais🔗

O EF Core simplifica enormemente o acesso e a manipulação de dados em C#, evitando que você se perca em um mar de SQL repetitivo. Ele oferece recursos📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. para mapeamento avançado, validações e até mesmo controle de versões do schema (por meio de outras técnicas que não abordamos detalhadamente aqui). Tudo isso permite focar mais na lógica de negócio e menos em como conversar com o banco de dados.

Experimente nas suas aplicações, comece com exemplos simples e vá explorando aos poucos. Outros recursos como carregamento antecipado (eager loading), Lazy Loading e configurações de mapeamento avançadas estão ao seu dispor. Você logo perceberá que seu fluxo de trabalho🛠️ GitHub Actions para OSS: CI/CD Profissional de Graça!🛠️ GitHub Actions para OSS: CI/CD Profissional de Graça!Descubra neste tutorial como automatizar testes, builds e deploys em projetos OSS com GitHub Actions, elevando a qualidade do seu software. para criar, ler e manipular dados vai ficar muito mais suave.

Agora que você conheceu o essencial do EF Core, pode aprofundar em outros tópicos específicos, como migrações, queries complexas e otimizações de performance🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos! - tudo para aproveitar ao máximo essa mágica no seu código!

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados