EasyExtensions.EntityFrameworkCore
3.0.65
dotnet add package EasyExtensions.EntityFrameworkCore --version 3.0.65
NuGet\Install-Package EasyExtensions.EntityFrameworkCore -Version 3.0.65
<PackageReference Include="EasyExtensions.EntityFrameworkCore" Version="3.0.65" />
<PackageVersion Include="EasyExtensions.EntityFrameworkCore" Version="3.0.65" />
<PackageReference Include="EasyExtensions.EntityFrameworkCore" />
paket add EasyExtensions.EntityFrameworkCore --version 3.0.65
#r "nuget: EasyExtensions.EntityFrameworkCore, 3.0.65"
#:package EasyExtensions.EntityFrameworkCore@3.0.65
#addin nuget:?package=EasyExtensions.EntityFrameworkCore&version=3.0.65
#tool nuget:?package=EasyExtensions.EntityFrameworkCore&version=3.0.65
EasyExtensions
EasyExtensions is a modular set of .NET packages for application code that tends to repeat across projects: core BCL extensions, ASP.NET Core helpers, PostgreSQL/EF Core setup, Quartz job registration, WebDAV clients, ImageSharp utilities, embedded fonts, streaming AES-GCM encryption, and a lightweight mediator.
The repository is intentionally split into small NuGet packages. Install only the package you need, keep your application dependencies narrow, and use the XML documentation in your IDE or FuGet when you need a full API reference.
Contents
- Packages
- Installation
- Quick Examples
- Configuration Notes
- Build and Test
- Releases
- Contributing
- License
Packages
| Package | Target | Use when you need |
|---|---|---|
| EasyExtensions | netstandard2.1 |
Core extensions and helpers for strings, hashes, streams, enums, dates, IP/networking, claims, random strings, queues, password hashing abstractions, Brotli HTTP helpers, and stream cipher abstractions. |
| EasyExtensions.AspNetCore | net10.0 |
ASP.NET Core helpers for exception responses, health checks, CORS, request metadata, rate limiting helpers, console logging, controllers, form files, CPU usage, and PBKDF2 password hashing registration. |
| EasyExtensions.AspNetCore.Authorization | net10.0 |
JWT authentication setup, token creation, claim building, development authorization bypass, and a base auth controller with login, refresh, logout, password, and Google login hooks. |
| EasyExtensions.AspNetCore.Sentry | net10.0 |
Sentry ASP.NET Core integration with user capture. |
| EasyExtensions.AspNetCore.Stack | net10.0 |
One-call application setup for controllers, logging, compression, Quartz, SignalR, CORS, health checks, optional PostgreSQL, optional authorization, and optional EasyVault secrets. |
| EasyExtensions.Clients | net10.0 |
Cached IP lookup helpers backed by ipapi.co. |
| EasyExtensions.Crypto | net10.0 |
Streaming AES-GCM encryption/decryption, per-chunk authentication, HKDF subkeys, secure random bytes, and hash helpers. |
| EasyExtensions.Drawing | net10.0 |
ImageSharp helpers for JPEG conversion, drawing text, blurred backgrounds, automatic brightness adjustment, and font integration. |
| EasyExtensions.EntityFrameworkCore | net10.0 |
Audited entities and DbContext base types, Gridify mapper registration, database health checks, and migration helpers. |
| EasyExtensions.EntityFrameworkCore.Npgsql | net10.0 |
PostgreSQL DbContext registration, connection string construction from configuration, lazy loading options, and design-time factory registration. |
| EasyExtensions.Fonts | netstandard2.1 |
Embedded fonts: Arial, Consola, FreeMonospaced, RetroGaming, and UbuntuMono. |
| EasyExtensions.Mediator | netstandard2.1 |
A MediatR v12.5.0 based mediator package with request, notification, stream request, pipeline behavior, pre/post processor, and exception processor support. |
| EasyExtensions.Quartz | netstandard2.1 |
Reflection-based Quartz job registration with JobTriggerAttribute, hosted service setup, and optional PostgreSQL persistent store. |
| EasyExtensions.WebDav | netstandard2.1 |
WebDAV and Nextcloud file operations: folders, existence checks, uploads, listings, downloads, and deletes. |
| EasyExtensions.Windows | netstandard2.1 |
Windows-specific helpers for shortcuts and moving files or directories to the recycle bin. |
Installation
Install packages individually:
dotnet add package EasyExtensions
dotnet add package EasyExtensions.AspNetCore
dotnet add package EasyExtensions.Crypto
dotnet add package EasyExtensions.EntityFrameworkCore.Npgsql
For an opinionated ASP.NET Core setup, start with:
dotnet add package EasyExtensions.AspNetCore.Stack
Quick Examples
Core Helpers
using EasyExtensions.Extensions;
using EasyExtensions.Helpers;
using System.Net;
string digest = "hello".Sha512();
IPAddress network = IPAddress.Parse("192.168.10.25").GetNetwork(24);
string maskedEmail = StringHelpers.HideEmail("vadim@example.com");
ASP.NET Core
using EasyExtensions.AspNetCore.Extensions;
builder.Logging.AddSimpleConsoleLogging();
builder.Services
.AddDefaultHealthChecks()
.AddDefaultCorsWithOrigins("https://app.example.com")
.AddExceptionHandler()
.AddPbkdf2PasswordHashService();
JWT Authorization
using EasyExtensions.AspNetCore.Authorization.Extensions;
builder.Services.AddJwt(useCookies: true);
{
"JwtSettings": {
"Key": "0123456789abcdef0123456789abcdef",
"Issuer": "my-api",
"Audience": "my-clients",
"LifetimeMinutes": 60
}
}
EasyStack
using EasyExtensions.AspNetCore.Stack.Extensions;
builder.AddEasyStack(stack => stack
.WithPostgres<AppDbContext>(useLazyLoadingProxies: false)
.AddAuthorization()
.UseSecrets(useSecrets: true));
PostgreSQL and EF Core
using EasyExtensions.EntityFrameworkCore.Npgsql.Extensions;
builder.Services.AddPostgresDbContext<AppDbContext>(postgres =>
{
postgres.ConfigurationSection = "DatabaseSettings";
postgres.UseLazyLoadingProxies = false;
});
{
"DatabaseSettings": {
"Host": "localhost",
"Port": "5432",
"Username": "postgres",
"Password": "postgres",
"Database": "app"
}
}
Quartz Jobs
using EasyExtensions.Quartz.Attributes;
using EasyExtensions.Quartz.Extensions;
using Quartz;
[JobTrigger(minutes: 5, startNow: true)]
public sealed class CleanupJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
return Task.CompletedTask;
}
}
builder.Services.AddQuartzJobs();
Streaming Encryption
using EasyExtensions.Crypto;
using System.Security.Cryptography;
byte[] masterKey = RandomNumberGenerator.GetBytes(AesGcmStreamCipher.KeySize);
using var cipher = new AesGcmStreamCipher(masterKey, memoryLimitBytes: 256L * 1024 * 1024);
await using var input = File.OpenRead("plain.bin");
await using var encrypted = File.Create("plain.bin.eegcm");
await cipher.EncryptAsync(input, encrypted);
await using var cipherText = File.OpenRead("plain.bin.eegcm");
await using var plainText = File.Create("plain-restored.bin");
await cipher.DecryptAsync(cipherText, plainText);
WebDAV and Nextcloud
using EasyExtensions.WebDav;
using var client = WebDavCloudClient.CreateNextcloudClient(
"https://cloud.example.com",
username: "user",
password: "app-password");
await client.CreateFolderAsync("backups");
using var backup = File.OpenRead("backup.zip");
await client.UploadFileAsync(backup, "backups/backup.zip");
Configuration Notes
- The full solution currently uses the .NET 10 SDK. Some packages still target
netstandard2.1; see the package table before choosing a package for older applications. EasyExtensions.AspNetCore.Authorizationaccepts either aJwtSettingssection or flatJwtKey,JwtIssuer,JwtAudience, andJwtLifetimeMinuteskeys. Configure a persistent signing key in production.EasyExtensions.AspNetCore.Stackallows all CORS origins whenCorsOriginsis missing. SetCorsOriginsexplicitly for production services.EasyExtensions.AspNetCore.SentryenablesSendDefaultPiiwhen Sentry is active. Review this against your data handling policy.EasyExtensions.Cryptoexpects you to own key storage and rotation. Do not hard-code master keys in source control.EasyExtensions.WebDavcurrently changesServicePointManager.ServerCertificateValidationCallback; review this before production use.
Build and Test
git clone https://github.com/bvdcode/EasyExtensions.git
cd EasyExtensions/Sources
dotnet restore
dotnet build --configuration Release
dotnet test --configuration Release
The test projects use NUnit and target net10.0.
Releases
Releases are produced by GitHub Actions from main when files under Sources/ change. The workflow builds the solution, packs NuGet packages, publishes artifacts, pushes packages to GitHub Packages and NuGet.org, and creates a GitHub release. Versioning is driven by GitVersion; the current next-version is configured in GitVersion.yml.
Contributing
Contributions are welcome. For a clean pull request:
- Fork the repository.
- Create a focused feature branch.
- Add or update tests for behavior changes.
- Run
dotnet testfromSources/. - Update this README when package scope, setup, or public examples change.
- Open a pull request with a clear description of the change.
Issues and feature requests are also welcome. Small, well-scoped proposals are easiest to review.
License
Most packages are distributed under the MIT License. See LICENSE.md.
EasyExtensions.Mediator is based on MediatR v12.5.0 and uses Apache-2.0 package licensing. See Sources/EasyExtensions.Mediator/LICENSE.md.
Contact
Created and maintained by Vadim Belov.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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
- EasyExtensions (>= 3.0.65)
- Gridify (>= 2.19.1)
- Gridify.EntityFramework (>= 2.19.1)
- Microsoft.EntityFrameworkCore (>= 10.0.8)
- Microsoft.EntityFrameworkCore.Relational (>= 10.0.8)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.8)
- Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions (>= 10.0.8)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.8)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on EasyExtensions.EntityFrameworkCore:
| Package | Downloads |
|---|---|
|
EasyExtensions.EntityFrameworkCore.Npgsql
Ready-to-use library for simplifying the development of .NET applications. |
|
|
EasyExtensions.AspNetCore.Stack
Ready-to-use library for simplifying the development of .NET applications. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.0.65 | 0 | 5/18/2026 |
| 3.0.64 | 0 | 5/18/2026 |
| 3.0.63 | 427 | 4/27/2026 |
| 3.0.62 | 165 | 4/24/2026 |
| 3.0.61 | 139 | 4/23/2026 |
| 3.0.60 | 110 | 4/22/2026 |
| 3.0.59 | 109 | 4/22/2026 |
| 3.0.58 | 109 | 4/22/2026 |
| 3.0.57 | 110 | 4/22/2026 |
| 3.0.56 | 136 | 4/14/2026 |
| 3.0.55 | 180 | 3/31/2026 |
| 3.0.54 | 142 | 3/20/2026 |
| 3.0.53 | 174 | 3/14/2026 |
| 3.0.52 | 136 | 3/10/2026 |
| 3.0.51 | 144 | 3/3/2026 |
| 3.0.50 | 249 | 3/1/2026 |
| 3.0.49 | 141 | 2/25/2026 |
| 3.0.48 | 116 | 2/25/2026 |
| 3.0.47 | 123 | 2/24/2026 |
| 3.0.46 | 123 | 2/24/2026 |