# MiGu.DB

迷毂平台持久化框架（EF Core 8）。由 `MiGu.Server` 引用；本工程不依赖 ASP.NET。

## 分层

| 目录 | 职责 |
|------|------|
| `Abstractions/` | 对外契约：能力接口、仓储/UoW、Provider、Module、Actor、异常 |
| `Kernel/` | 框架实现：实体基类族、MiGuDbContext、约定/Interceptor、仓储、Hosting |
| `Domains/` | 业务实体、枚举、辅助类与 `IEntityTypeConfiguration` |
| `Migrations/Sqlite/` | Schema 版本化来源（发版用；开发可用 EnsureCreated 不跑迁移） |

## 使用

由 `MiGu.Server` 调用：

```csharp
builder.Services.AddPlatformPersistence(builder.Configuration); // 内部 AddMiGuDb
await app.Services.EnsurePlatformDatabaseAsync();               // 内部 MigrateMiGuDbAsync
```

**启动流程、SchemaMode、开发/发版配置说明见 [MiGu.Server/README.md · 数据库启动流程](../MiGu.Server/README.md#数据库启动流程)。**

配置键（`Database:*` / `ConnectionStrings:Platform`）由 Server 的 `appsettings*.json` 提供；本库通过 `AddMiGuDb(IConfiguration)` 读取。

## 实体与枚举

- 业务状态字段为 **enum**，约定自动 `HasConversion<string>()`（严格 1:1，不做读侧归一）。
- 旧库值（如 `Available`/`Idle`）由 `LegacyStatusNormalizationMigrator` 一次性刷成规范名。
- `Version` 为乐观并发令牌；软删走全局 `HasQueryFilter`。
- 复数辅助类（`StorageStatuses`、`LocationKinds`…）负责 API 字符串解析与集合校验。

## 扩展

- **新 Provider**：实现 `IDbProviderSetup` + `Migrations/{Name}/`
- **新领域**：`Domains/Xxx` 实体 + Configuration；可选 `IEntityModule`
- **数据修补**：实现 `IDataMigrator`（优先 LINQ；枚举旧值刷库等特例可定点 raw UPDATE）

## 生成 Migration（Sqlite）

完整步骤、命令说明与排错见 **[MIGRATIONS.md](./MIGRATIONS.md)**。

快速命令：

```powershell
dotnet ef migrations add <Name> `
  --project .\MiGu.DB\MiGu.DB.csproj `
  --startup-project .\MiGu.Server\MiGu.Server.csproj `
  --output-dir Migrations/Sqlite `
  --namespace MiGu.DB.Migrations.Sqlite `
  --context MiGuDbContext
```

生成后请确认 `MiGuDbContextModelSnapshot.cs` 落在 `Migrations/Sqlite/`。

开发期使用 `EnsureCreated` 时仍可保留/继续提交 Migration 文件，启动不会应用它们，直到 `SchemaMode` 改回 `Migrate`（见 Server README）。
