XDev.Outbox.EFCore
0.2.6
dotnet add package XDev.Outbox.EFCore --version 0.2.6
NuGet\Install-Package XDev.Outbox.EFCore -Version 0.2.6
<PackageReference Include="XDev.Outbox.EFCore" Version="0.2.6" />
<PackageVersion Include="XDev.Outbox.EFCore" Version="0.2.6" />
<PackageReference Include="XDev.Outbox.EFCore" />
paket add XDev.Outbox.EFCore --version 0.2.6
#r "nuget: XDev.Outbox.EFCore, 0.2.6"
#:package XDev.Outbox.EFCore@0.2.6
#addin nuget:?package=XDev.Outbox.EFCore&version=0.2.6
#tool nuget:?package=XDev.Outbox.EFCore&version=0.2.6
XDev.Outbox.EFCore
Summary
Easy to use outbox pattern implementation for EF Core. This library provides a simple way to implement the outbox pattern in your EF Core applications, allowing you to reliably send messages or events to external systems while ensuring that your database and message broker remain in sync.
NuGet
https://www.nuget.org/packages/XDev.Outbox.EFCore
Setup
After installation XDev.Outbox.EFCore, extend your DbContext from OutboxDbContext:
public class ApplicationDbContext : OutboxDbContext<int>
{
public ApplicationDbContext(
DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
public DbSet<User> Users { get; set; }
}
Add to your dependency injection setup:
...
services.AddOutbox(Assembly.GetExecutingAssembly());
services.AddEFCoreOutboxStore<ApplicationDbContext>();
...
Then run EF Core migrations to create the outbox table in your database:
dotnet ef migrations add Outbox
Usage
Subscribe to the outbox events in your application:
using XDev.Outbox;
public class UserCreatedEventHandler : ISubscriber<UserCreatedEvent>
{
private readonly ILogger _logger;
public UserCreatedEventHandler(ILogger<UserCreatedEventHandler> logger)
{
_logger = logger;
}
public async Task HandleEventAsync(UserCreatedEvent eventMessage, CancellationToken cancellationToken = default)
{
_logger.LogInformation("UserCreatedEventHandler received event: {message}", JsonSerializer.Serialize(eventMessage));
await Task.Delay(1000, cancellationToken); // Simulate some processing delay
}
}
Create new user logic:
var dbContext = serviceProvider.GetRequiredService<ApplicationDbContext>();
var outbox = serviceProvider.GetRequiredService<IOutbox>();
var newUser = new User
{
Email = "testuser@example.com",
CreatedDate = DateTime.UtcNow,
};
dbContext.Users.Add(newUser);
outbox.AddEvent(new UserCreatedEvent
{
User = newUser
});
await dbContext.SaveChangesAsync(cancellationToken);
Thank you,
Daniel
| 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.Data.SqlClient (>= 6.1.6)
- Microsoft.EntityFrameworkCore (>= 8.0.0)
- Microsoft.EntityFrameworkCore.Relational (>= 8.0.0)
- Microsoft.Extensions.DependencyInjection (>= 8.0.0)
- XDev.Outbox (>= 0.2.6)
-
net8.0
- Microsoft.Data.SqlClient (>= 6.1.6)
- Microsoft.EntityFrameworkCore (>= 8.0.0)
- Microsoft.EntityFrameworkCore.Relational (>= 8.0.0)
- Microsoft.Extensions.DependencyInjection (>= 8.0.0)
- XDev.Outbox (>= 0.2.6)
-
net9.0
- Microsoft.Data.SqlClient (>= 6.1.6)
- Microsoft.EntityFrameworkCore (>= 8.0.0)
- Microsoft.EntityFrameworkCore.Relational (>= 8.0.0)
- Microsoft.Extensions.DependencyInjection (>= 8.0.0)
- XDev.Outbox (>= 0.2.6)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.