Skip to content

Commit 2d1f464

Browse files
committed
Add CLAUDE.md for project guidance and documentation
1 parent fc0ca32 commit 2d1f464

1 file changed

Lines changed: 87 additions & 0 deletions

File tree

CLAUDE.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# CLAUDE.md
2+
3+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4+
5+
## Project Overview
6+
7+
EntityFrameworkCore.Triggered is a library that adds trigger support (before/after save hooks) to Entity Framework Core. Triggers react to entity changes during `SaveChanges` via `IBeforeSaveTrigger<T>`, `IAfterSaveTrigger<T>`, and related interfaces.
8+
9+
## Build & Test Commands
10+
11+
```bash
12+
# Build (default is V3 / .NET 6.0)
13+
dotnet build EntityFrameworkCore.Triggered.sln
14+
15+
# Run all tests
16+
dotnet test EntityFrameworkCore.Triggered.sln
17+
18+
# Run a single test project
19+
dotnet test test/EntityFrameworkCore.Triggered.Tests
20+
21+
# Run a specific test
22+
dotnet test test/EntityFrameworkCore.Triggered.Tests --filter "FullyQualifiedName~TriggerSessionTests.RaiseBeforeSaveTriggers"
23+
24+
# Build for V2 (.NET Standard 2.1)
25+
dotnet build EntityFrameworkCore.Triggered.sln -c ReleaseV2
26+
27+
# Build for V1 (.NET Standard 2.0)
28+
dotnet build EntityFrameworkCore.Triggered.sln -c ReleaseV1
29+
30+
# Pack NuGet packages
31+
dotnet pack EntityFrameworkCore.Triggered.sln -c Release
32+
```
33+
34+
## Architecture
35+
36+
### Project Dependency Graph
37+
38+
```
39+
Abstractions <── Core (EntityFrameworkCore.Triggered) <── Extensions
40+
<── Transactions
41+
Transactions.Abstractions <── Transactions
42+
```
43+
44+
- **Abstractions**: Pure interfaces (`IBeforeSaveTrigger<T>`, `IAfterSaveTrigger<T>`, `ITriggerContext<T>`, `ITriggerSession`, `ChangeType`, lifecycle triggers). No EF Core dependency.
45+
- **Core**: Main implementation — `TriggerSession` (orchestrator, ~400 lines), `TriggerService`, `TriggerContext`, trigger discovery, cascade strategies, and EF Core integration via `UseTriggers()`.
46+
- **Extensions**: Assembly scanning for trigger discovery (`AddAssemblyTriggers`).
47+
- **Transactions**: Transaction-scoped triggers (`IBeforeCommitTrigger`, `IAfterCommitTrigger`).
48+
49+
### Key Internal Components
50+
51+
- **TriggerSession** (`src/EntityFrameworkCore.Triggered/TriggerSession.cs`): Core orchestrator that coordinates trigger discovery, invocation, and cascading during SaveChanges.
52+
- **TriggerContextTracker** (`Internal/`): Wraps EF Core's ChangeTracker to discover pending entity changes.
53+
- **TriggerDiscoveryService** (`Internal/`): Resolves registered triggers for entity types, supporting type inheritance and priority ordering.
54+
- **Descriptor classes** (`Internal/Descriptors/`): Handle invocation of specific trigger types (BeforeSave, AfterSave, etc.) via reflection.
55+
- **CascadeStrategies** (`Internal/CascadeStrategies/`): Control re-discovery of changes after triggers modify entities. Default is `EntityAndTypeCascadeStrategy`.
56+
57+
### Registration Entry Points
58+
59+
- `UseTriggers()` on `DbContextOptionsBuilder` — core configuration
60+
- `AddTriggeredDbContext<T>()` / `AddTriggeredDbContextPool<T>()` / `AddTriggeredDbContextFactory<T>()` — service collection helpers in `Extensions/ServiceCollectionExtensions.cs`
61+
62+
## Multi-Version Strategy
63+
64+
The project supports multiple EF Core versions via build configurations and conditional compilation:
65+
66+
| Config | Target | Preprocessor Symbol | EF Core |
67+
|--------|--------|---------------------|---------|
68+
| Release (V3) | net6.0 | `EFCORETRIGGERED3` | 6.0.0 |
69+
| ReleaseV2 | netstandard2.1 | `EFCORETRIGGERED2` | 3.1.x |
70+
| ReleaseV1 | netstandard2.0 | `EFCORETRIGGERED1` | 3.1.x |
71+
72+
Version-specific code uses `#if EFCORETRIGGERED3` guards. The current branch (`v3`) targets V3.
73+
74+
## Build Settings
75+
76+
- **TreatWarningsAsErrors**: enabled globally (`Directory.Build.props`)
77+
- **Nullable reference types**: enabled
78+
- **LangVersion**: 9.0
79+
- **Strong naming**: enabled (signed with `EntityFrameworkCore.Triggered.snk`)
80+
81+
## Test Projects
82+
83+
- `EntityFrameworkCore.Triggered.Tests` — unit tests (xUnit), uses EF Core InMemory provider
84+
- `EntityFrameworkCore.Triggered.IntegrationTests` — full SaveChanges lifecycle tests
85+
- `EntityFrameworkCore.Triggered.Extensions.Tests` — assembly trigger discovery
86+
- `EntityFrameworkCore.Triggered.Transactions.Tests` — transaction trigger behavior
87+
- `EntityFrameworkCore.Triggered.Analyzers.Tests` — Roslyn analyzer tests

0 commit comments

Comments
 (0)