For the complete documentation index, see llms.txt. This page is also available as Markdown.

MSSQL Outbox

The MSSQL Outbox provides a message store for the Transactional Outbox pattern using a Microsoft SQL Server database. This ensures that messages are saved within the same transaction as your business logic and published to a message broker later.

Provisioning the Outbox Table

You have two equally valid options for creating and maintaining the Outbox table:

Option A — Let Brighter provision and migrate it for you (recommended for greenfield apps).

Brighter ships a library that creates the table on first start and evolves its schema across Brighter releases automatically. See Database Provisioning for the overview and Configuring Box Provisioning for the call-site shape.

Option B — Manage the DDL yourself (recommended where you have schema-change governance).

Use MsSqlOutboxBuilder.GetDDL() to obtain the same DDL Brighter ships, then drive it through your own change-management tooling — FluentMigrator, Flyway, Liquibase, an enterprise change-window pipeline, or hand-rolled scripts. The rest of this page describes this option.

Neither option is deprecated. Choose based on fit: small teams and greenfield apps benefit from startup-time provisioning; teams with DBA approval workflows or change windows often prefer to drive the same DDL through their own tooling.

NuGet Packages

To use the MSSQL Outbox, you need to install the following packages from NuGet. If you are using Entity Framework Core, you will also need the EF Core integration package.

Install-Package Paramore.Brighter.MsSql
Install-Package Paramore.Brighter.Outbox.MsSql

For Entity Framework Core support:

Install-Package Paramore.Brighter.MsSql.EntityFrameworkCore

Database Table Schema

The MSSQL Outbox requires a specific table in your database to store messages before they are dispatched. You can generate the necessary SQL Data Definition Language (DDL) script to create this table using the MsSqlOutboxBuilder helper class.

Note: When you choose Option B, you are responsible for creating the table and applying schema changes when upgrading to new versions of Brighter. Option A handles both for you — see Database Provisioning. Either way, application-level concerns like additional indexes for query performance remain your responsibility.

Generating the DDL

The MsSqlOutboxBuilder.GetDDL() method creates the SQL script for you. You can execute this script against your database to create the outbox table.

Example SQL Script

Running MsSqlOutboxBuilder.GetDDL("Outbox") will generate the following SQL script:

Configuration

To configure the MSSQL Outbox, you need to provide an outbox implementation in the AddProducers configuration when setting up Brighter.

1. Provide Database Configuration

First, define the configuration for your SQL Server database connection. We recommend retrieving the connection string from your application's configuration (e.g., appsettings.json) rather than hardcoding it.

2. Register the Outbox

Next, in your ConfigureServices method or Program.cs, add the outbox configuration when calling AddBrighter. You need to specify the Outbox, ConnectionProvider, and TransactionProvider.

The TransactionProvider depends on how you manage your database transactions.

  • Use MsSqlUnitOfWork for ADO.NET-based transaction management.

  • Use MsSqlEntityFrameworkConnectionProvider<T> if you are using Entity Framework Core, where T is your DbContext.

Example with Entity Framework Core

For more detailed information on integrating with Entity Framework Core, please see the EF Core Outbox documentation.

Here is a complete example of configuring the MSSQL Outbox with EF Core.

Last updated

Was this helpful?