Jarvis.EntityFrameworkCore 3.0.1.2

dotnet add package Jarvis.EntityFrameworkCore --version 3.0.1.2
                    
NuGet\Install-Package Jarvis.EntityFrameworkCore -Version 3.0.1.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Jarvis.EntityFrameworkCore" Version="3.0.1.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Jarvis.EntityFrameworkCore" Version="3.0.1.2" />
                    
Directory.Packages.props
<PackageReference Include="Jarvis.EntityFrameworkCore" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Jarvis.EntityFrameworkCore --version 3.0.1.2
                    
#r "nuget: Jarvis.EntityFrameworkCore, 3.0.1.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Jarvis.EntityFrameworkCore@3.0.1.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Jarvis.EntityFrameworkCore&version=3.0.1.2
                    
Install as a Cake Addin
#tool nuget:?package=Jarvis.EntityFrameworkCore&version=3.0.1.2
                    
Install as a Cake Tool

Jarvis.EntityFrameworkCore

Biblioteca de extensões para Entity Framework Core com tratamento de erros automático, operações CRUD simplificadas e suporte a exclusão lógica (soft delete).

Instalação

dotnet add package Jarvis.EntityFrameworkCore

DbUpdateResponse

Todas as operações de escrita retornam um DbUpdateResponse com o status da operação.

var response = context.AddAndSave(produto);

if (response.IsSuccess)
{
    // sucesso
}

if (response.IsError)
{
    // response.Exception contém a exceção
}

Consultas (DbContext e DbSet)

Todos os métodos de consulta possuem tratamento de exceção automático, retornando null em caso de erro.

Find

// Por DbContext
var produto = context.Find<Produto>(id);
var produto = await context.FindAsync<Produto>(id);

// Por DbSet
var produto = context.Produtos.Find(id);
var produto = await context.Produtos.FindAsync(id);

FirstOrDefault

var produto = context.FirstOrDefault<Produto>();
var produto = context.FirstOrDefault<Produto>(x => x.Ativo);
var produto = await context.FirstOrDefaultAsync<Produto>(x => x.Nome == "Teste");

All (IQueryable)

var produtos = context.All<Produto>();
var ativos = context.All<Produto>(x => x.Ativo);

AllAsEnumerable

var produtos = context.AllAsEnumerable<Produto>();
var ativos = context.AllAsEnumerable<Produto>(x => x.Ativo);

AllAsAsyncEnumerable

var produtos = context.AllAsAsyncEnumerable<Produto>();
var ativos = context.AllAsAsyncEnumerable<Produto>(x => x.Ativo);

Find em IQueryable

Busca por chave primária em qualquer IQueryable<T>. Detecta a chave via [Key] ou propriedade Id.

var produto = await context.All<Produto>(x => x.Ativo).Find(id);

Inserção

Cada método possui três variantes: sem save, com save síncrono (AndSave) e com save assíncrono (AndSaveAsync).

// Adicionar sem salvar
context.Add(produto);

// Adicionar e salvar
context.AddAndSave(produto);
var response = await context.AddAndSaveAsync(produto);

// Adicionar vários
context.AddRange(listaProdutos);
context.AddRangeAndSave(listaProdutos);
await context.AddRangeAndSaveAsync(listaProdutos);

Atualização

A entidade deve estar rastreada (tracked) pelo contexto. O update salva as alterações detectadas pelo change tracker.

produto.Nome = "Novo Nome";

context.UpdateAndSave(produto);
var response = await context.UpdateAndSaveAsync(produto);

// Atualizar vários
context.UpdateRangeAndSave(listaProdutos);
await context.UpdateRangeAndSaveAsync(listaProdutos);

Remoção

Remoção física

context.RemoveAndSave(produto);
var response = await context.RemoveAndSaveAsync(produto);

Exclusão lógica (Soft Delete)

Define a propriedade Ativo como false (por padrão) ou uma propriedade customizada.

// Usando a propriedade "Ativo" (padrão)
context.LogicalRemoveAndSave(produto);
await context.LogicalRemoveAndSaveAsync(produto);

// Usando uma propriedade customizada
context.LogicalRemoveAndSave(produto, x => x.Habilitado);
await context.LogicalRemoveAndSaveAsync(produto, x => x.Habilitado);

Limpar tabela

Remove todos os registros de uma tabela.

context.ClearAndSave<Produto>();
await context.ClearAndSaveAsync<Produto>();

Save

var response = context.Save();
var response = await context.SaveAsync();

Metadados

// Nome da tabela no banco
var tableName = context.GetTableName<Produto>();

// Nome da coluna no banco
var columnName = context.GetColumnName<Produto>(x => x.Nome);

Change Tracking (EntityEntry)

Extensões para trabalhar com o change tracker do EF Core.

// Obter entradas modificadas
var modified = context.GetModifiedEntries();

// Obter/definir valores de propriedades
foreach (var entry in modified)
{
    var nome = entry.GetPropertyValue("Nome");
    entry.SetPropertyValue("DataAlteracao", DateTime.Now);

    var prop = entry.GetProperty("Nome");
    // prop.CurrentValue, prop.OriginalValue, prop.IsModified
}

DbSet vs DbContext

Todos os métodos estão disponíveis tanto como extensão de DbContext quanto de DbSet<T>:

// Via DbContext
context.Find<Produto>(id);
context.AddAndSave(produto);

// Via DbSet
context.Produtos.Find(id);
context.Produtos.AddAndSave(produto);
Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Jarvis.EntityFrameworkCore:

Package Downloads
Jarvis.DAO

Biblioteca DAO para EntityFrameworkCore.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
3.0.1.2 45 2/1/2026
3.0.1.1 106 1/23/2026
3.0.1 327 11/13/2025
3.0.0.9 372 4/18/2025
3.0.0.8 228 2/13/2025
3.0.0.7 236 11/13/2024
3.0.0.6 225 9/25/2024
3.0.0.5 322 8/13/2024
3.0.0.4 199 8/2/2024
3.0.0.3 217 6/11/2024
3.0.0.2 243 4/29/2024
3.0.0.1 248 3/24/2024
3.0.0 246 3/23/2024
2.0.1 263 3/15/2024
2.0.0.9 227 2/18/2024
2.0.0.8 1,692 12/31/2023
2.0.0.7 240 12/30/2023
2.0.0.6 252 11/16/2023
2.0.0.4 508 11/9/2022
2.0.0.3 599 7/28/2022
2.0.0.2 585 6/2/2022
2.0.0.1 614 5/23/2022
2.0.0 512 11/10/2021
1.0.0.3 683 5/16/2021
1.0.0.2 520 5/11/2021
1.0.0.1 520 4/30/2021
1.0.0 524 4/20/2021