Skip to content

Commit c84f6d4

Browse files
thorajclaude
andcommitted
docs: Clarify transaction guarantees in Quick Start
Add explicit warning in Step 1 that sharing connection string alone is not enough for transaction guarantees. The database must also support UseTransaction() to coordinate transactions across contexts using a shared physical connection object. This clarifies that: 1. Same connection string is REQUIRED (same database) 2. Database must support UseTransaction() to share connection objects 3. Same connection string alone ≠ automatic atomicity without database support 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent cf52a65 commit c84f6d4

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

MULTI_CONTEXT_USAGE_GUIDE.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,32 @@ Multi-context support allows you to store different Casbin policy types in separ
2020

2121
Create separate `CasbinDbContext` instances for different storage locations.
2222

23+
**⚠️ IMPORTANT for transaction guarantees:** To ensure atomic operations across contexts:
24+
1. All contexts must use the **same connection string** (same database)
25+
2. The database must support `UseTransaction()` to share a physical connection object
26+
3. **Same connection string alone is not enough** - the database must be able to coordinate transactions
27+
2328
**Example: SQL Server with different schemas**
2429

2530
```csharp
2631
using Microsoft.EntityFrameworkCore;
2732
using Casbin.Persist.Adapter.EFCore;
2833

29-
// Define connection string once
34+
// Define connection string once - REQUIRED for atomic transactions
3035
string connectionString = "Server=localhost;Database=CasbinDB;Trusted_Connection=True;";
3136

3237
// Policy context - "policies" schema
3338
var policyContext = new CasbinDbContext<int>(
3439
new DbContextOptionsBuilder<CasbinDbContext<int>>()
35-
.UseSqlServer(connectionString)
40+
.UseSqlServer(connectionString) // Same connection string = atomic transactions
3641
.Options,
3742
schemaName: "policies");
3843
policyContext.Database.EnsureCreated();
3944

4045
// Grouping context - "groupings" schema
4146
var groupingContext = new CasbinDbContext<int>(
4247
new DbContextOptionsBuilder<CasbinDbContext<int>>()
43-
.UseSqlServer(connectionString)
48+
.UseSqlServer(connectionString) // Same connection string = atomic transactions
4449
.Options,
4550
schemaName: "groupings");
4651
groupingContext.Database.EnsureCreated();

0 commit comments

Comments
 (0)