---
description: Populate database with test or initial data
agent: efcore-db-seed
model: haiku
---

# EF Core Database Seed

> **Ref:** [_shared.md](_shared.md)

---

## Conformité

| ❌ INTERDIT | ✅ OBLIGATOIRE |
|-------------|----------------|
| Scripts .sql dans repo | `HasData()` dans configurations |
| `sqlcmd` avec INSERT | Classes `IDataSeeder` |
| `migrationBuilder.Sql()` INSERT | Migrations EF Core typées |

---

## STEP 0: Vérification Environnement

```bash
detect_environment
block_production
```

---

## STEP 1: Détecter Méthodes Disponibles

```bash
# HasData() dans configurations (RECOMMANDÉ)
grep -rq "\.HasData(" . --include="*.cs" && SEED_METHODS+=" hasdata"

# Classes IDataSeeder
grep -rq "IDataSeeder\|class.*Seeder" . --include="*.cs" && SEED_METHODS+=" seeder-class"

# Argument --seed dans Program.cs
grep -q "\-\-seed" ./Program.cs && SEED_METHODS+=" cli-argument"

# WARNING si scripts SQL détectés
[ -f "./scripts/seed.sql" ] && echo "⚠️ Scripts SQL détectés - INTERDIT"
```

---

## STEP 2: Sélection Méthode

```javascript
AskUserQuestion({
  questions: [{
    question: "Méthode de seeding?",
    header: "Seed",
    options: [
      { label: "HasData (Recommandé)", description: "Via migrations EF Core" },
      { label: "Seeder Class", description: "Exécuter DbSeeder/DataSeeder" },
      { label: "CLI --seed", description: "Lancer app avec --seed" }
    ],
    multiSelect: false
  }]
})
```

**Si aucune méthode:** afficher guide HasData() et IDataSeeder.

---

## STEP 3: Exécution

**HasData:** `dotnet ef database update`

**Seeder Class:** `dotnet run --project "$STARTUP_PROJECT" -- --seed`

---

## Résumé

```
SEED - {DATABASE_NAME}
├── Environnement: {SELECTED_ENV}
├── Méthode: {method_used}
├── Conformité: ✓ EF Core natif, ✓ Pas de SQL brut
└── Prochains: /efcore:db-status, dotnet run
```

---

## Guide Migration SQL → HasData

```csharp
// ❌ AVANT (INTERDIT): scripts/seed.sql
INSERT INTO Users (Id, Name) VALUES (1, 'Admin');

// ✅ APRÈS (CORRECT): UserConfiguration.cs
builder.HasData(new User {
    Id = Guid.Parse("7f3c9a2e-8d1b-4e5f-a6c8-9b4d2f7e1a3c"),
    Name = "Admin"
});
// Puis: dotnet ef migrations add SeedData
```
