---
description: Deploy EF Core migrations to local database
agent: efcore-db-deploy
model: haiku
---

# EF Core Database Deploy

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

---

## STEP 0: Vérification Environnement

```bash
detect_environment
block_production
```

Afficher: fichiers disponibles, environnement sélectionné, connexion cible.

---

## STEP 1: Détecter Projet et DbContext

```bash
detect_efcore_project   # Appelle detect_dbcontext() automatiquement
echo "DbContext: $DBCONTEXT ($DBCONTEXT_TYPE)"
```

**Si DbContext non détecté automatiquement :**

```javascript
AskUserQuestion({
  questions: [{
    question: "Quel DbContext déployer ?",
    header: "DbContext",
    options: [
      { label: "CoreDbContext", description: "Migrations du schéma core" },
      { label: "ExtensionsDbContext", description: "Migrations du schéma extensions" },
      { label: "Les deux", description: "Déployer core puis extensions" }
    ],
    multiSelect: false
  }]
})
```

---

## STEP 2: Vérifier Migrations Pending

```bash
PENDING_COUNT=$(dotnet ef migrations list \
  --context "$DBCONTEXT" \
  --project "$INFRA_PROJECT" \
  --startup-project "$STARTUP_PROJECT" \
  --json | grep -c '"applied": false')
```

---

## STEP 3: Appliquer

```bash
dotnet ef database update \
  --context "$DBCONTEXT" \
  --project "$INFRA_PROJECT" \
  --startup-project "$STARTUP_PROJECT" \
  --verbose
```

> **Note :** Si "Les deux" sélectionné, exécuter pour CoreDbContext puis ExtensionsDbContext.

---

## Résumé

**Si succès:**
```
DEPLOY - {DATABASE_NAME}
├── Environnement: {SELECTED_ENV}
├── Serveur: {SERVER_NAME}
├── Migrations appliquées: {N}
└── Prochains: /efcore:db-status, /efcore:db-seed
```

**Si aucune pending:**
```
DEPLOY - À jour
├── Aucune migration en attente
└── Prochains: /efcore:migration, /efcore:scan
```

**Si erreur connexion:**
```
DEPLOY - Échec
├── Vérifications: SQL Server démarré?, DB existe?, Credentials OK?
└── Commandes: sqlcmd -S {SERVER} -E, /efcore:db-reset
```

---

## Options

| Option | Description |
|--------|-------------|
| `--env {name}` | Utiliser appsettings.{name}.json |
| `--verbose` | Afficher SQL |
| `--context {name}` | Spécifier DbContext |
