這個專案是 EF Core 行為樣本 demo,以可重複執行的 NUnit 測試呈現 Entity Framework Core 在導覽屬性同步、SaveChanges() 失敗狀態、資料庫預設值與 DateTime 時區處理上的行為。
對應筆記:
- 淺談 Entity Framework 的導覽屬性與外鍵的同步更新。
- 淺談 Entity Framework 中 SaveChanges() 的異常處理與狀態還原。
- 淺談 Entity Framework 中的預設值行為。
- Entity Framework 中 DateTime 時區問題與解決方案。
- SPEC.md:demo 範圍、Solution / 專案檔規格、測試策略與 Demo 界線。
- LICENSE.md:MIT 授權條款。
- Target Framework:
.NET 10 - ORM:Entity Framework Core
- Database Provider:SQLite in-memory database
- 測試:NUnit 4
- Demo 型態:以測試案例作為主要展示介面
EfCoreBehaviorSample/
├── src/EfCoreBehaviorSample/
│ ├── Data/
│ ├── Entities/
│ └── Scenarios/
├── tests/EfCoreBehaviorSample.Tests/
└── EfCoreBehaviorSample.slnx
dotnet test .\EfCoreBehaviorSample.slnxNavigationFixupTests:驗證未追蹤與已追蹤 Entity 在導覽屬性、外鍵與Find()載入主體時的 relationship fixup 行為。SaveChangesFailureTests:使用唯一索引衝突重現SaveChanges()失敗,並示範 detach 與 reload 的狀態清理。DefaultValueTests:驗證資料庫預設值、CLR 預設值、未變更更新與AsNoTracking()對後續更新的影響。DateTimeKindTests:驗證DateTime.Kind讀寫與 value converter 的 UTC 正規化行為。
本專案使用 SQLite in-memory database,目標是讓測試可在本機直接執行。SQLite 的日期時間儲存型別、預設值 SQL 表示與 SQL Server 不完全相同;測試只宣告此 provider 下可觀察到的 EF Core 行為,不延伸為 SQL Server 精度、鎖定或隔離層級示範。
本專案採用 MIT 授權條款。