CacheOrchestrator.EFCore.Invalidation
3.0.0-beta.2
See the version list below for details.
dotnet add package CacheOrchestrator.EFCore.Invalidation --version 3.0.0-beta.2
NuGet\Install-Package CacheOrchestrator.EFCore.Invalidation -Version 3.0.0-beta.2
<PackageReference Include="CacheOrchestrator.EFCore.Invalidation" Version="3.0.0-beta.2" />
<PackageVersion Include="CacheOrchestrator.EFCore.Invalidation" Version="3.0.0-beta.2" />
<PackageReference Include="CacheOrchestrator.EFCore.Invalidation" />
paket add CacheOrchestrator.EFCore.Invalidation --version 3.0.0-beta.2
#r "nuget: CacheOrchestrator.EFCore.Invalidation, 3.0.0-beta.2"
#:package CacheOrchestrator.EFCore.Invalidation@3.0.0-beta.2
#addin nuget:?package=CacheOrchestrator.EFCore.Invalidation&version=3.0.0-beta.2&prerelease
#tool nuget:?package=CacheOrchestrator.EFCore.Invalidation&version=3.0.0-beta.2&prerelease
CacheOrchestrator.EFCore.Invalidation
CacheOrchestrator unifies the configuration of Output Cache, data cache, and client Cache-Control within a single domain model. It ensures seamless coordination and cache invalidation across all layers while significantly reducing boilerplate code.
This package hooks EF Core SaveChanges: map a CLR type to (domain, entityKind); after a successful save, matching entity tags are purged through ICacheOrchestratorInvalidator.
Install
dotnet add package CacheOrchestrator.EFCore.Invalidation --prerelease
Config
Domain policy (same as the rest of CacheOrchestrator). Optional interceptor options:
{
"Cache": {
"Domains": {
"catalog": {
"Version": "1",
"DataCache": { "TtlSeconds": 300 },
"OutputCache": { "TtlSeconds": 60 }
}
},
"EFCore": {
"Invalidation": {
"Enabled": true
}
}
}
}
Example
dotnet add package CacheOrchestrator --prerelease
dotnet add package CacheOrchestrator.EFCore.Invalidation --prerelease
builder.Services.AddCacheOrchestrator(builder.Configuration);
builder.Services.AddCacheOrchestratorEfCoreInvalidation(builder.Configuration);
builder.Services.AddDbContext<AppDbContext>((sp, opt) =>
{
opt.UseSqlServer(connectionString);
opt.AddCacheOrchestratorInvalidation(sp);
});
// In OnModelCreating (or Map<T> / [CacheEntity]):
// modelBuilder.Entity<Product>().CacheInvalidate("catalog", "products");
var app = builder.Build();
app.UseCacheOrchestrator();
app.MapGet("/api/products/{id}", async (HttpContext http, string id, IDomainDataCache cache, AppDbContext db) =>
{
var data = await cache.GetOrSetEntityAsync(http, async ct =>
{
Product? p = await db.Products.AsNoTracking().FirstOrDefaultAsync(x => x.Id.ToString() == id, ct);
return p is null ? null : new ProductDto(p.Id, p.Price);
});
return data is null ? Results.NotFound() : Results.Json(data);
})
.CacheOutputWithDomain("catalog", resourceRouteKey: "id", entityKind: "products");
app.MapPut("/api/products/{id}", async (string id, UpdatePriceBody body, AppDbContext db, CancellationToken ct) =>
{
Product product = await db.Products.SingleAsync(x => x.Id.ToString() == id, ct);
product.Price = body.Price;
await db.SaveChangesAsync(ct); // interceptor invalidates — no manual Invalidate*
return Results.NoContent();
});
Tracked SaveChanges invalidates automatically; ExecuteUpdate / ExecuteDelete require manual Invalidate*. More layouts: composition §8–§9 · composition how-to.
Related packages
| Package | Role |
|---|---|
| CacheOrchestrator | Meta package (AspNetCore + Fusion) for typical web apps |
| CacheOrchestrator.Core | Http-free domains and ICacheOrchestrator (libraries / workers) |
| CacheOrchestrator.AspNetCore | Output Cache, Client Cache, Admin API, IDomainDataCache |
| CacheOrchestrator.FusionCache | FusionCache data-cache provider |
| CacheOrchestrator.HybridCache | Microsoft HybridCache data-cache provider |
| CacheOrchestrator.Redis | Redis Output Cache store / Fusion L2 / backplane |
| CacheOrchestrator.HttpBus | Multi-instance invalidate / Version / settings bus |
Documentation
License
MIT — LICENSE.md
| 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 was computed. 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
- CacheOrchestrator.Core (>= 3.0.0-beta.2)
- Microsoft.EntityFrameworkCore (>= 10.0.10)
-
net8.0
- CacheOrchestrator.Core (>= 3.0.0-beta.2)
- Microsoft.EntityFrameworkCore (>= 8.0.22)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 3.0.0-beta.3 | 46 | 8/30/2026 | |
| 3.0.0-beta.2 | 50 | 8/25/2026 | |
| 3.0.0-beta.1 | 54 | 8/25/2026 | |
| 2.1.0 | 118 | 8/15/2026 | |
| 2.0.0 | 113 | 8/13/2026 |
CacheOrchestrator 3.0.0-beta.2
Beta 2 release of the completely redesigned v3 architecture, built around a new modular package ecosystem. This release separates the HTTP-free core orchestration from the ASP.NET host, introduces foundational support for both FusionCache and HybridCache providers, and is published for early integration testing and community feedback.
(Note for existing users: v3 is a full redesign and does not preserve API compatibility with 1.x or 2.x. Please see the Changelog before upgrading.)
Full notes: https://github.com/amarinsek/CacheOrchestrator/blob/main/CHANGELOG.md