NuvTools.Data.EntityFrameworkCore
10.0.0
dotnet add package NuvTools.Data.EntityFrameworkCore --version 10.0.0
NuGet\Install-Package NuvTools.Data.EntityFrameworkCore -Version 10.0.0
<PackageReference Include="NuvTools.Data.EntityFrameworkCore" Version="10.0.0" />
<PackageVersion Include="NuvTools.Data.EntityFrameworkCore" Version="10.0.0" />
<PackageReference Include="NuvTools.Data.EntityFrameworkCore" />
paket add NuvTools.Data.EntityFrameworkCore --version 10.0.0
#r "nuget: NuvTools.Data.EntityFrameworkCore, 10.0.0"
#:package NuvTools.Data.EntityFrameworkCore@10.0.0
#addin nuget:?package=NuvTools.Data.EntityFrameworkCore&version=10.0.0
#tool nuget:?package=NuvTools.Data.EntityFrameworkCore&version=10.0.0
Nuv Tools Data Libraries
Nuv Tools Data Libraries are a set of .NET libraries designed to simplify and standardize data access and manipulation. They provide abstractions and helpers for common data operations, as well as seamless integration with Entity Framework Core for SQL Server and PostgreSQL.
🎯 Key Features
- Multi-Framework Support: .NET 8, .NET 9, and .NET 10
- ORM-Agnostic Core: Base paging and sorting utilities work with any data source
- EF Core Integration: First-class support for Entity Framework Core 10.0
- Result Pattern: All database operations return
IResultorIResult<T>for consistent error handling - Async-First: All EF Core operations are async with
CancellationTokensupport - Bulk Operations: Efficient bulk add, update, and remove operations
- Well-Documented: Comprehensive XML documentation for IntelliSense support
📦 Libraries Overview
NuvTools.Data
Core library with generic helpers for data manipulation:
- Paging: Abstracts paging logic for both
IQueryableandIEnumerablecollections - Sorting: Extension methods for sorting with ascending/descending direction
- Filtering: Paging filters with optional sorting capabilities
- No dependencies: Works with any data source or ORM
dotnet add package NuvTools.Data
NuvTools.Data.EntityFrameworkCore
Extensions for Entity Framework Core:
- DbContextBase: Base class with CRUD operations using Result pattern
- Transaction Management: Built-in transaction support with rollback/commit
- Execution Strategies: Connection resiliency with automatic retry
- Bulk Operations:
SyncFromListAsync,AddOrUpdateFromListAsync,AddOrRemoveFromListAsync - Async Paging:
PagingWrapAsyncfor efficient database paging
dotnet add package NuvTools.Data.EntityFrameworkCore
NuvTools.Data.EntityFrameworkCore.SqlServer
Specialized helpers for SQL Server with EF Core:
- Simple Registration:
AddDatabaseandAddDatabaseByConnectionNameextension methods - Configuration Integration: Load connection strings from
appsettings.json - SQL Server Options: Configure SQL Server-specific options via
SqlServerDbContextOptionsBuilder
dotnet add package NuvTools.Data.EntityFrameworkCore.SqlServer
NuvTools.Data.EntityFrameworkCore.PostgreSQL
Specialized helpers for PostgreSQL with EF Core:
- Simple Registration:
AddDatabaseandAddDatabaseByConnectionNameextension methods - Snake Case Convention:
UseSnakeCaseNamingConventionfor PostgreSQL naming standards - Npgsql Options: Configure PostgreSQL-specific options via
NpgsqlDbContextOptionsBuilder
dotnet add package NuvTools.Data.EntityFrameworkCore.PostgreSQL
🚀 Quick Start
Basic Paging (NuvTools.Data)
using NuvTools.Data.Paging;
// In-memory paging
var items = new List<Product> { /* ... */ };
var pagedResult = items.PagingWrap(pageNumber: 1, pageSize: 20);
Console.WriteLine($"Page {pagedResult.PageNumber} of {Math.Ceiling(pagedResult.Total / 20.0)}");
foreach (var item in pagedResult.List)
{
Console.WriteLine(item.Name);
}
Sorting (NuvTools.Data)
using NuvTools.Data.Sorting;
using NuvTools.Data.Sorting.Enumerations;
var sortedProducts = products
.Sort(p => p.Category, SortDirection.ASC)
.ThenSort(p => p.Price, SortDirection.DESC);
SQL Server Registration (NuvTools.Data.EntityFrameworkCore.SqlServer)
using NuvTools.Data.EntityFrameworkCore.SqlServer.Extensions;
// In Program.cs or Startup.cs
builder.Services.AddDatabaseByConnectionName<MyDbContext>("DefaultConnection");
// Or with connection string directly
builder.Services.AddDatabase<MyDbContext>(connectionString);
// With SQL Server-specific options
builder.Services.AddDatabaseByConnectionName<MyDbContext>(
"DefaultConnection",
sqlServerOptions => sqlServerOptions.EnableRetryOnFailure()
);
PostgreSQL with Snake Case (NuvTools.Data.EntityFrameworkCore.PostgreSQL)
using NuvTools.Data.EntityFrameworkCore.PostgreSQL.Extensions;
// Register DbContext
builder.Services.AddDatabaseByConnectionName<MyDbContext>("PostgresConnection");
// In your DbContext
public class MyDbContext : DbContextBase
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Apply snake_case naming convention for PostgreSQL
modelBuilder.UseSnakeCaseNamingConvention();
base.OnModelCreating(modelBuilder);
}
}
Using DbContextBase
using NuvTools.Data.EntityFrameworkCore.Context;
public class MyDbContext : DbContextBase
{
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { }
public DbSet<Product> Products { get; set; }
}
// In your service
public class ProductService
{
private readonly MyDbContext _context;
public async Task<IResult<int>> CreateProductAsync(Product product)
{
// AddAndSaveAsync returns IResult<TKey>
return await _context.AddAndSaveAsync<Product, int>(product);
}
public async Task<IResult> UpdateProductAsync(Product product, int id)
{
// UpdateAndSaveAsync returns IResult
return await _context.UpdateAndSaveAsync(product, id);
}
public async Task<IResult> DeleteProductAsync(int id)
{
// RemoveAndSaveAsync returns IResult
return await _context.RemoveAndSaveAsync<Product>(id);
}
}
Async Paging with EF Core
using NuvTools.Data.EntityFrameworkCore.Paging;
public async Task<PagingWithEnumerableList<Product>> GetProductsAsync(int pageNumber, int pageSize)
{
var query = _context.Products.Where(p => p.IsActive);
// PagingWrapAsync materializes the data
var pagedResult = await query.PagingWrapWithEnumerableListAsync(pageNumber, pageSize);
return pagedResult;
}
Bulk Operations
// Sync from list: Add new, update existing, remove missing
var result = await _context.SyncFromListAsync(
updatedProducts,
p => p.Id,
p => p.IsActive // Optional filter
);
// Add or update only (no removal)
await _context.AddOrUpdateFromListAsync(products, p => p.Id);
// Add or remove only (no updates)
await _context.AddOrRemoveFromListAsync(products, p => p.Id);
📋 Requirements
- .NET SDK: 8.0, 9.0, or 10.0
- Entity Framework Core: 10.0.0 (for EF Core libraries)
- Database Providers:
- SQL Server: Microsoft.EntityFrameworkCore.SqlServer 10.0.0
- PostgreSQL: Npgsql.EntityFrameworkCore.PostgreSQL 10.0.0
🔧 Development
Building the Solution
dotnet build NuvTools.Data.slnx
Running Tests
# Run all tests
dotnet test
# Run specific test project
dotnet test tests/NuvTools.Data.Test/NuvTools.Data.Test.csproj
Creating NuGet Packages
dotnet build NuvTools.Data.slnx -c Release
Packages are automatically generated in bin/Release folders when building in Release configuration.
📝 Version History
Version 10.0.0
- Added .NET 10 support
- Updated to Entity Framework Core 10.0.0
- Updated all Microsoft packages to version 10.0.0
- Comprehensive XML documentation added to all public APIs
- Migrated solution to .slnx format
📄 License
This project is licensed under the terms specified in the LICENSE file.
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
🔗 Links
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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. |
-
net10.0
- Microsoft.EntityFrameworkCore (>= 10.0.0)
- Microsoft.Extensions.Configuration.Json (>= 10.0.0)
- NuvTools.Common (>= 10.0.0)
- NuvTools.Data (>= 10.0.0)
-
net8.0
- Microsoft.EntityFrameworkCore (>= 9.0.11)
- Microsoft.Extensions.Configuration.Json (>= 10.0.0)
- NuvTools.Common (>= 10.0.0)
- NuvTools.Data (>= 10.0.0)
-
net9.0
- Microsoft.EntityFrameworkCore (>= 9.0.11)
- Microsoft.Extensions.Configuration.Json (>= 10.0.0)
- NuvTools.Common (>= 10.0.0)
- NuvTools.Data (>= 10.0.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on NuvTools.Data.EntityFrameworkCore:
| Package | Downloads |
|---|---|
|
NuvTools.AspNetCore.EntityFrameworkCore
EntityFramework Core helper library to use with ASP.NET Aplications. |
|
|
NuvTools.Security.Identity.EntityFrameworkCore
Contains Entity Framework Core helpers to be used with ASP.NET Identity modules. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 10.0.0 | 133 | 12/6/2025 |
| 9.5.0 | 190 | 10/25/2025 |
| 9.3.3 | 589 | 7/15/2025 |
| 9.3.2 | 887 | 5/22/2025 |
| 9.3.1 | 213 | 4/13/2025 |
| 9.2.2 | 289 | 4/10/2025 |
| 9.2.1 | 230 | 3/31/2025 |
| 9.2.0 | 571 | 3/25/2025 |
| 9.1.0 | 223 | 3/13/2025 |
| 9.0.9 | 190 | 2/5/2025 |
| 9.0.8 | 167 | 1/2/2025 |
| 9.0.7 | 178 | 12/31/2024 |
| 9.0.6 | 149 | 12/29/2024 |
| 9.0.5 | 129 | 12/28/2024 |
| 9.0.4 | 172 | 12/26/2024 |
| 9.0.3 | 199 | 11/24/2024 |
| 9.0.2 | 162 | 11/22/2024 |
| 9.0.1 | 139 | 11/21/2024 |
| 9.0.0 | 177 | 11/13/2024 |
| 8.1.3 | 158 | 9/30/2024 |
| 8.1.2 | 183 | 9/27/2024 |
| 8.1.1 | 177 | 9/27/2024 |
| 8.1.0 | 233 | 9/9/2024 |
| 8.0.3 | 442 | 3/5/2024 |
| 8.0.2 | 275 | 2/14/2024 |
| 8.0.0 | 220 | 1/28/2024 |
| 7.1.0 | 411 | 9/10/2023 |
| 7.0.1 | 271 | 8/27/2023 |
| 7.0.0 | 428 | 2/27/2023 |