IronAlpine.Data.EFCore
2.1.2
See the version list below for details.
dotnet add package IronAlpine.Data.EFCore --version 2.1.2
NuGet\Install-Package IronAlpine.Data.EFCore -Version 2.1.2
<PackageReference Include="IronAlpine.Data.EFCore" Version="2.1.2" />
<PackageVersion Include="IronAlpine.Data.EFCore" Version="2.1.2" />
<PackageReference Include="IronAlpine.Data.EFCore" />
paket add IronAlpine.Data.EFCore --version 2.1.2
#r "nuget: IronAlpine.Data.EFCore, 2.1.2"
#:package IronAlpine.Data.EFCore@2.1.2
#addin nuget:?package=IronAlpine.Data.EFCore&version=2.1.2
#tool nuget:?package=IronAlpine.Data.EFCore&version=2.1.2
IronAlpine.Data.EFCore
IronAlpine.Data.EFCore is the Entity Framework Core runtime for IronAlpine data access.
It provides:
- repository implementations for read, write, aggregate, and projection access
- EF Core
IUnitOfWork - auditing and persistence interceptors
- built-in audit-log persistence support
- resilient save extensions
- enumeration conversion helpers
Why
Use this package when your service persistence runtime is EF Core and you want repository/UoW abstractions with deterministic modeling and interceptor behavior.
It exists so services stop rebuilding the same repository, save, and auditing infrastructure.
Install
dotnet add package IronAlpine.Data.EFCore
Optional companion package:
dotnet add package IronAlpine.Data.EFCore.Mediator
Quick Start
builder.Services.AddIronAlpineDataEfCoreDbContext<AppDbContext>(builder.Configuration);
Public Surface
Primary registration methods:
AddIronAlpineDataEfCoreDbContext<TDbContext>(...)AddIronAlpineDataEfCore<TDbContext>(...)
Important helpers:
SaveChangesResilientAsync(...)HasEnumerationConversion<TEnum>()HasNullableEnumerationConversion<TEnum>()
Configuration
Configuration root:
{
"IronAlpine": {
"Data": {
"EFCore": {
"ConnectionStringName": "DefaultConnection",
"EnableSensitiveDataLogging": false,
"EnableDetailedErrors": false,
"CommandTimeoutSeconds": 30,
"Auditing": {
"DefaultActorValue": "system"
}
}
}
}
}
Runtime Responsibilities
This package registers:
IUnitOfWork- repository implementations
- EF interceptors for auditing and persistence concerns
- audit log writer
- contributor/modeling runtime integration
Options and Behavior
Connection string selection
- typically resolved from configuration by the consuming service registration
- best practice: use explicit named connection strings per service database
Sensitive data logging
- keep off in production unless diagnosing a contained problem
- turning it on increases exposure risk for parameter values
Detailed errors
- useful during troubleshooting
- small runtime overhead, usually acceptable outside hot paths
Command timeout
- keep explicit for services with long-running queries or replay workflows
- do not hide slow-query problems by setting it arbitrarily high
Auditing default actor
- used when runtime actor resolution is not available
- design-time migrations and background maintenance paths commonly fall back to this value
Repositories
The package provides concrete implementations for:
- aggregate repositories
- projection repositories
- read repositories
- write repositories
Best practice:
- use aggregate repositories for write models
- use projection read repositories for query models
- keep
IQueryableusage inside handlers/repositories, not controllers
Unit of Work
IUnitOfWork remains handler-driven in the DPS migration strategy.
That means:
- handlers decide when to save
- transaction behaviors may wrap execution
- save timing stays explicit
Use:
await _unitOfWork.SaveChangesAsync(cancellationToken);
await _unitOfWork.SaveChangesResilientAsync(cancellationToken);
Use the resilient variant when the operation should respect configured save resiliency policy.
Auditing
Built-in pieces include:
- audit entity interceptors for
CreatedBy,CreatedOnUtc,ModifiedBy,ModifiedOnUtc AuditLogentity mapping and contributorIAuditLogWriterEF implementation
This gives both row-level persistence auditing and audit log table support.
Enumerations and Value Objects
Enumeration helpers
Use:
HasEnumerationConversion<TEnum>()HasNullableEnumerationConversion<TEnum>()
when mapping IronAlpine Enumeration<T> values.
Value object policy
Generic magic converters are intentionally not provided.
Use explicit EF mapping:
OwnsOne(...)- custom
HasConversion(...)
This keeps query semantics and migrations deterministic.
Combinations
Data.EFCore + Data.EFCore.Mediator
Recommended when mediator pipeline transactions and domain-event dispatch are required.
Data.EFCore + Messaging.InboxOutbox.EFCore
Recommended for services publishing and consuming integration events with durable inbox/outbox tables.
Data.EFCore + Security.Authorization.EFCore
Use when permission projections must be persisted and kept queryable.
Troubleshooting
Repositories are registered but tables are missing
Cause:
- model contributors or provider configuration missing
Fix:
- verify service-level EF registration and contributor packages
Auditing fields stay empty
Cause:
- no current-user provider
- no fallback actor configured
Fix:
- verify web/security runtime registration
- verify default auditing actor for non-request flows
Enumeration columns fail at runtime
Cause:
- entity mapping did not apply enumeration conversion
Fix:
- add the explicit enumeration conversion helper in the entity configuration
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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
- IronAlpine.Data.Abstractions (>= 2.1.2)
- IronAlpine.Data.EFCore.Modeling (>= 2.1.2)
- IronAlpine.Framework.Abstractions (>= 2.0.0)
- IronAlpine.Kernel (>= 2.1.0)
- IronAlpine.Resilience (>= 2.0.0)
- Microsoft.EntityFrameworkCore (>= 9.0.7)
- Microsoft.EntityFrameworkCore.Relational (>= 9.0.7)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.7)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 9.0.7)
-
net9.0
- IronAlpine.Data.Abstractions (>= 2.1.2)
- IronAlpine.Data.EFCore.Modeling (>= 2.1.2)
- IronAlpine.Framework.Abstractions (>= 2.0.0)
- IronAlpine.Kernel (>= 2.1.0)
- IronAlpine.Resilience (>= 2.0.0)
- Microsoft.EntityFrameworkCore (>= 9.0.7)
- Microsoft.EntityFrameworkCore.Relational (>= 9.0.7)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.7)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 9.0.7)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on IronAlpine.Data.EFCore:
| Package | Downloads |
|---|---|
|
IronAlpine.Data.EFCore.Mediator
Mediator pipeline behaviors that bridge IronAlpine.Mediator and IronAlpine.Data.EFCore. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Stable mediator release with request/response, notification publish strategies, streaming, and dependency injection integration.