Mediarq.EntityFrameworkCore
1.5.1
dotnet add package Mediarq.EntityFrameworkCore --version 1.5.1
NuGet\Install-Package Mediarq.EntityFrameworkCore -Version 1.5.1
<PackageReference Include="Mediarq.EntityFrameworkCore" Version="1.5.1" />
<PackageVersion Include="Mediarq.EntityFrameworkCore" Version="1.5.1" />
<PackageReference Include="Mediarq.EntityFrameworkCore" />
paket add Mediarq.EntityFrameworkCore --version 1.5.1
#r "nuget: Mediarq.EntityFrameworkCore, 1.5.1"
#:package Mediarq.EntityFrameworkCore@1.5.1
#addin nuget:?package=Mediarq.EntityFrameworkCore&version=1.5.1
#tool nuget:?package=Mediarq.EntityFrameworkCore&version=1.5.1
Mediarq.EntityFrameworkCore
Use your EF Core DbContext as the Mediarq unit of work, and publish domain events raised by your
aggregates after a successful commit.
dotnet add package Mediarq.EntityFrameworkCore
Usage
builder.Services.AddDbContext<AppDbContext>(o => o.UseSqlServer(connectionString)); // your context first
builder.Services.AddMediarqEntityFrameworkCore<AppDbContext>(); // after AddMediarq/AddMediarqCore
public record CreateOrder(string Customer) : ICommand<Result<Guid>>, ITransactionalRequest;
public class CreateOrderHandler(AppDbContext db) : ICommandHandler<CreateOrder, Result<Guid>>
{
public Task<Result<Guid>> Handle(CreateOrder request, CancellationToken ct = default)
{
var order = new Order { /* ... */ };
db.Orders.Add(order); // staged; the behavior calls SaveChanges on success
return Task.FromResult(Result.Success(order.Id));
}
}
A failed Result is not persisted. Combine with Mediarq.Outbox to commit integration events
atomically with your data.
Domain events
builder.Services.AddMediarqDomainEvents(); // registers DomainEventsInterceptor for AppDbContext to pick up
public class Order : AggregateRoot // or implement IHasDomainEvents yourself
{
public Guid Id { get; private set; }
public void Place()
{
// ... mutate state ...
AddDomainEvent(new OrderPlaced(Id));
}
}
The event is collected (and cleared from the aggregate) right before SaveChangesAsync runs, then
Published only once the commit actually succeeds — a failed save discards the collected events rather
than publishing them or leaving them to be raised twice on a retry. Only SaveChangesAsync is
intercepted; there is no synchronous SaveChanges support (IPublisher is async-only).
No wiring needed in your own AddDbContext(...) call — the interceptor is picked up automatically from
the application service provider, the same way AddDbContext already resolves everything else it needs.
Learn more
Wiring extensions · Full README
MIT © Nicolas Rouffart
| 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
- Mediarq.UnitOfWork (>= 1.5.1)
- Microsoft.EntityFrameworkCore (>= 8.0.10)
-
net8.0
- Mediarq.UnitOfWork (>= 1.5.1)
- Microsoft.EntityFrameworkCore (>= 8.0.10)
-
net9.0
- Mediarq.UnitOfWork (>= 1.5.1)
- Microsoft.EntityFrameworkCore (>= 8.0.10)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.