@atlashub/smartstack-cli 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.documentation/agents.html +912 -0
- package/.documentation/apex.html +1014 -0
- package/.documentation/business-analyse.html +1074 -0
- package/.documentation/commands.html +676 -0
- package/.documentation/css/styles.css +2030 -0
- package/.documentation/efcore.html +2501 -0
- package/.documentation/gitflow.html +2053 -0
- package/.documentation/hooks.html +409 -0
- package/.documentation/index.html +319 -0
- package/.documentation/installation.html +458 -0
- package/.documentation/js/app.js +794 -0
- package/.documentation/test-web.html +509 -0
- package/README.md +90 -0
- package/config/default-config.json +86 -0
- package/config/settings.json +53 -0
- package/config/settings.local.example.json +16 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +38198 -0
- package/dist/index.js.map +1 -0
- package/package.json +86 -0
- package/templates/agents/action.md +36 -0
- package/templates/agents/efcore/conflicts.md +57 -0
- package/templates/agents/efcore/db-deploy.md +51 -0
- package/templates/agents/efcore/db-reset.md +59 -0
- package/templates/agents/efcore/db-seed.md +56 -0
- package/templates/agents/efcore/db-status.md +43 -0
- package/templates/agents/efcore/migration.md +85 -0
- package/templates/agents/efcore/rebase-snapshot.md +62 -0
- package/templates/agents/efcore/scan.md +60 -0
- package/templates/agents/efcore/squash.md +67 -0
- package/templates/agents/explore-codebase.md +65 -0
- package/templates/agents/explore-docs.md +97 -0
- package/templates/agents/fix-grammar.md +49 -0
- package/templates/agents/gitflow/abort.md +45 -0
- package/templates/agents/gitflow/cleanup.md +85 -0
- package/templates/agents/gitflow/commit.md +40 -0
- package/templates/agents/gitflow/exec.md +48 -0
- package/templates/agents/gitflow/finish.md +92 -0
- package/templates/agents/gitflow/init.md +139 -0
- package/templates/agents/gitflow/merge.md +62 -0
- package/templates/agents/gitflow/plan.md +42 -0
- package/templates/agents/gitflow/pr.md +78 -0
- package/templates/agents/gitflow/review.md +49 -0
- package/templates/agents/gitflow/start.md +61 -0
- package/templates/agents/gitflow/status.md +32 -0
- package/templates/agents/snipper.md +36 -0
- package/templates/agents/websearch.md +46 -0
- package/templates/commands/_resources/formatting-guide.md +124 -0
- package/templates/commands/ai-prompt.md +315 -0
- package/templates/commands/apex/1-analyze.md +100 -0
- package/templates/commands/apex/2-plan.md +145 -0
- package/templates/commands/apex/3-execute.md +171 -0
- package/templates/commands/apex/4-examine.md +116 -0
- package/templates/commands/apex/5-tasks.md +209 -0
- package/templates/commands/apex.md +76 -0
- package/templates/commands/application/create.md +362 -0
- package/templates/commands/application/templates-backend.md +463 -0
- package/templates/commands/application/templates-frontend.md +517 -0
- package/templates/commands/application/templates-i18n.md +478 -0
- package/templates/commands/application/templates-seed.md +362 -0
- package/templates/commands/application.md +303 -0
- package/templates/commands/business-analyse/1-init.md +269 -0
- package/templates/commands/business-analyse/2-discover.md +520 -0
- package/templates/commands/business-analyse/3-analyse.md +408 -0
- package/templates/commands/business-analyse/4-specify.md +598 -0
- package/templates/commands/business-analyse/5-validate.md +326 -0
- package/templates/commands/business-analyse/6-handoff.md +746 -0
- package/templates/commands/business-analyse/7-doc-html.md +602 -0
- package/templates/commands/business-analyse/bug.md +325 -0
- package/templates/commands/business-analyse/change-request.md +368 -0
- package/templates/commands/business-analyse/hotfix.md +200 -0
- package/templates/commands/business-analyse.md +559 -0
- package/templates/commands/controller/create.md +216 -0
- package/templates/commands/controller/postman-templates.md +528 -0
- package/templates/commands/controller/templates.md +600 -0
- package/templates/commands/controller.md +278 -0
- package/templates/commands/debug.md +95 -0
- package/templates/commands/documentation/module.md +202 -0
- package/templates/commands/documentation/templates.md +432 -0
- package/templates/commands/documentation.md +190 -0
- package/templates/commands/efcore/_env-check.md +153 -0
- package/templates/commands/efcore/conflicts.md +269 -0
- package/templates/commands/efcore/db-deploy.md +193 -0
- package/templates/commands/efcore/db-reset.md +426 -0
- package/templates/commands/efcore/db-seed.md +326 -0
- package/templates/commands/efcore/db-status.md +214 -0
- package/templates/commands/efcore/migration.md +388 -0
- package/templates/commands/efcore/rebase-snapshot.md +264 -0
- package/templates/commands/efcore/scan.md +202 -0
- package/templates/commands/efcore/squash.md +298 -0
- package/templates/commands/efcore.md +176 -0
- package/templates/commands/epct.md +69 -0
- package/templates/commands/explain.md +186 -0
- package/templates/commands/explore.md +45 -0
- package/templates/commands/feature-full.md +267 -0
- package/templates/commands/gitflow/1-init.md +1038 -0
- package/templates/commands/gitflow/10-start.md +768 -0
- package/templates/commands/gitflow/11-finish.md +323 -0
- package/templates/commands/gitflow/12-cleanup.md +276 -0
- package/templates/commands/gitflow/13-sync.md +216 -0
- package/templates/commands/gitflow/14-rebase.md +251 -0
- package/templates/commands/gitflow/2-status.md +167 -0
- package/templates/commands/gitflow/3-commit.md +194 -0
- package/templates/commands/gitflow/4-plan.md +145 -0
- package/templates/commands/gitflow/5-exec.md +147 -0
- package/templates/commands/gitflow/6-abort.md +344 -0
- package/templates/commands/gitflow/7-pull-request.md +226 -0
- package/templates/commands/gitflow/8-review.md +176 -0
- package/templates/commands/gitflow/9-merge.md +224 -0
- package/templates/commands/gitflow.md +128 -0
- package/templates/commands/implement.md +663 -0
- package/templates/commands/notification.md +129 -0
- package/templates/commands/oneshot.md +57 -0
- package/templates/commands/quick-search.md +72 -0
- package/templates/commands/review.md +106 -0
- package/templates/commands/utils/test-web-config.md +160 -0
- package/templates/commands/utils/test-web.md +151 -0
- package/templates/commands/workflow.md +193 -0
- package/templates/gitflow/config.json +138 -0
- package/templates/hooks/ef-migration-check.md +139 -0
- package/templates/hooks/hooks.json +15 -0
- package/templates/skills/ai-prompt/SKILL.md +778 -0
- package/templates/skills/application/SKILL.md +563 -0
- package/templates/skills/application/templates-backend.md +450 -0
- package/templates/skills/application/templates-frontend.md +531 -0
- package/templates/skills/application/templates-i18n.md +520 -0
- package/templates/skills/application/templates-seed.md +647 -0
- package/templates/skills/business-analyse/SKILL.md +191 -0
- package/templates/skills/business-analyse/questionnaire.md +283 -0
- package/templates/skills/business-analyse/templates-frd.md +477 -0
- package/templates/skills/business-analyse/templates-react.md +580 -0
- package/templates/skills/controller/SKILL.md +240 -0
- package/templates/skills/controller/postman-templates.md +614 -0
- package/templates/skills/controller/templates.md +1468 -0
- package/templates/skills/documentation/SKILL.md +133 -0
- package/templates/skills/documentation/templates.md +476 -0
- package/templates/skills/feature-full/SKILL.md +838 -0
- package/templates/skills/notification/SKILL.md +555 -0
- package/templates/skills/ui-components/SKILL.md +870 -0
- package/templates/skills/workflow/SKILL.md +582 -0
- package/templates/test-web/api-health.json +38 -0
- package/templates/test-web/minimal.json +19 -0
- package/templates/test-web/npm-package.json +46 -0
- package/templates/test-web/seo-check.json +54 -0
|
@@ -0,0 +1,2501 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="fr">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>EF Core Migrations - Claude Tools</title>
|
|
7
|
+
<link rel="stylesheet" href="css/styles.css">
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div class="app-container">
|
|
11
|
+
<!-- Global Header (single unified element) -->
|
|
12
|
+
<header class="global-header">
|
|
13
|
+
<div class="logo">CT</div>
|
|
14
|
+
<span class="site-title">Claude Tools</span>
|
|
15
|
+
<span class="version-badge">v1.8.7</span>
|
|
16
|
+
<div class="header-divider"></div>
|
|
17
|
+
<span class="page-title">EF Core Migrations</span>
|
|
18
|
+
<nav class="breadcrumb">
|
|
19
|
+
<a href="index.html">
|
|
20
|
+
<span data-lang="fr">Accueil</span>
|
|
21
|
+
<span data-lang="en">Home</span>
|
|
22
|
+
</a>
|
|
23
|
+
<span class="breadcrumb-separator">›</span>
|
|
24
|
+
<span data-lang="fr">Workflows</span>
|
|
25
|
+
<span data-lang="en">Workflows</span>
|
|
26
|
+
<span class="breadcrumb-separator">›</span>
|
|
27
|
+
<span class="breadcrumb-current">EF Core</span>
|
|
28
|
+
</nav>
|
|
29
|
+
<!-- Language Select -->
|
|
30
|
+
<select class="lang-select" id="lang-select" onchange="setLanguage(this.value); localStorage.setItem('doc-language', this.value);">
|
|
31
|
+
<option value="fr">🇫🇷 FR</option>
|
|
32
|
+
<option value="en">🇬🇧 EN</option>
|
|
33
|
+
</select>
|
|
34
|
+
<!-- Search -->
|
|
35
|
+
<div class="header-search">
|
|
36
|
+
<div class="search-input-wrapper">
|
|
37
|
+
<span class="search-icon">🔍</span>
|
|
38
|
+
<input type="text" id="search-input" class="search-input" placeholder="Rechercher..." data-placeholder-fr="Rechercher..." data-placeholder-en="Search..." autocomplete="off">
|
|
39
|
+
<span class="search-shortcut">Ctrl+K</span>
|
|
40
|
+
</div>
|
|
41
|
+
<div id="search-results" class="search-results"></div>
|
|
42
|
+
</div>
|
|
43
|
+
</header>
|
|
44
|
+
|
|
45
|
+
<!-- App Body -->
|
|
46
|
+
<div class="app-body">
|
|
47
|
+
<!-- Sidebar -->
|
|
48
|
+
<aside class="sidebar">
|
|
49
|
+
<button class="sidebar-toggle" title="Toggle sidebar">
|
|
50
|
+
<span class="toggle-icon-collapse">«</span>
|
|
51
|
+
<span class="toggle-icon-expand">»</span>
|
|
52
|
+
</button>
|
|
53
|
+
|
|
54
|
+
<nav class="sidebar-nav">
|
|
55
|
+
<div class="nav-section">
|
|
56
|
+
<div class="nav-section-title">
|
|
57
|
+
<span data-lang="fr">Demarrage</span>
|
|
58
|
+
<span data-lang="en">Getting Started</span>
|
|
59
|
+
</div>
|
|
60
|
+
<a href="index.html" class="nav-item">
|
|
61
|
+
<span class="icon">🏠</span>
|
|
62
|
+
<span class="nav-text" data-lang="fr">Accueil</span>
|
|
63
|
+
<span class="nav-text" data-lang="en">Home</span>
|
|
64
|
+
</a>
|
|
65
|
+
<a href="installation.html" class="nav-item">
|
|
66
|
+
<span class="icon">📦</span>
|
|
67
|
+
<span class="nav-text">Installation</span>
|
|
68
|
+
</a>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<div class="nav-section">
|
|
72
|
+
<div class="nav-section-title">Workflows</div>
|
|
73
|
+
<a href="gitflow.html" class="nav-item">
|
|
74
|
+
<span class="icon">🔀</span>
|
|
75
|
+
<span class="nav-text">GitFlow</span>
|
|
76
|
+
</a>
|
|
77
|
+
<div class="nav-item-with-toc">
|
|
78
|
+
<a href="efcore.html" class="active">
|
|
79
|
+
<span class="icon">🗄</span>
|
|
80
|
+
<span class="nav-text">EF Core</span>
|
|
81
|
+
<button class="toc-toggle">▶</button>
|
|
82
|
+
</a>
|
|
83
|
+
<nav class="sidebar-toc">
|
|
84
|
+
<a href="#quick-index" class="sidebar-toc-link">
|
|
85
|
+
<span data-lang="fr">Index rapide</span>
|
|
86
|
+
<span data-lang="en">Quick Index</span>
|
|
87
|
+
</a>
|
|
88
|
+
<a href="#introduction" class="sidebar-toc-link">Introduction</a>
|
|
89
|
+
<a href="#understanding" class="sidebar-toc-link">
|
|
90
|
+
<span data-lang="fr">Comprendre EF Core</span>
|
|
91
|
+
<span data-lang="en">Understanding EF Core</span>
|
|
92
|
+
</a>
|
|
93
|
+
<a href="#one-migration-rule" class="sidebar-toc-link">
|
|
94
|
+
<span data-lang="fr">1 Migration par Feature</span>
|
|
95
|
+
<span data-lang="en">1 Migration per Feature</span>
|
|
96
|
+
</a>
|
|
97
|
+
<a href="#commands" class="sidebar-toc-link">
|
|
98
|
+
<span data-lang="fr">Commandes (9)</span>
|
|
99
|
+
<span data-lang="en">Commands (9)</span>
|
|
100
|
+
</a>
|
|
101
|
+
<a href="#cross-branch" class="sidebar-toc-link">Cross-Branch (v1.2)</a>
|
|
102
|
+
<a href="#best-practices" class="sidebar-toc-link">
|
|
103
|
+
<span data-lang="fr">Bonnes pratiques</span>
|
|
104
|
+
<span data-lang="en">Best Practices</span>
|
|
105
|
+
</a>
|
|
106
|
+
<a href="#integration" class="sidebar-toc-link">
|
|
107
|
+
<span data-lang="fr">Integration GitFlow</span>
|
|
108
|
+
<span data-lang="en">GitFlow Integration</span>
|
|
109
|
+
</a>
|
|
110
|
+
<a href="#configuration" class="sidebar-toc-link">Configuration</a>
|
|
111
|
+
</nav>
|
|
112
|
+
</div>
|
|
113
|
+
<a href="apex.html" class="nav-item">
|
|
114
|
+
<span class="icon">🎯</span>
|
|
115
|
+
<span class="nav-text">APEX</span>
|
|
116
|
+
</a>
|
|
117
|
+
<a href="business-analyse.html" class="nav-item">
|
|
118
|
+
<span class="icon">📊</span>
|
|
119
|
+
<span class="nav-text">Business Analyse</span>
|
|
120
|
+
</a>
|
|
121
|
+
</div>
|
|
122
|
+
|
|
123
|
+
<div class="nav-section">
|
|
124
|
+
<div class="nav-section-title">
|
|
125
|
+
<span data-lang="fr">Outils</span>
|
|
126
|
+
<span data-lang="en">Tools</span>
|
|
127
|
+
</div>
|
|
128
|
+
<a href="agents.html" class="nav-item">
|
|
129
|
+
<span class="icon">🤖</span>
|
|
130
|
+
<span class="nav-text">Agents</span>
|
|
131
|
+
</a>
|
|
132
|
+
<a href="commands.html" class="nav-item">
|
|
133
|
+
<span class="icon">⚡</span>
|
|
134
|
+
<span class="nav-text" data-lang="fr">Commandes</span>
|
|
135
|
+
<span class="nav-text" data-lang="en">Commands</span>
|
|
136
|
+
</a>
|
|
137
|
+
<a href="hooks.html" class="nav-item">
|
|
138
|
+
<span class="icon">🔗</span>
|
|
139
|
+
<span class="nav-text">Hooks</span>
|
|
140
|
+
</a>
|
|
141
|
+
<a href="test-web.html" class="nav-item">
|
|
142
|
+
<span class="icon">🌐</span>
|
|
143
|
+
<span class="nav-text">Test Web</span>
|
|
144
|
+
</a>
|
|
145
|
+
</div>
|
|
146
|
+
</nav>
|
|
147
|
+
|
|
148
|
+
</aside>
|
|
149
|
+
|
|
150
|
+
<!-- Main Content -->
|
|
151
|
+
<main class="main-content">
|
|
152
|
+
<div class="content-full">
|
|
153
|
+
|
|
154
|
+
<!-- ============================================================ -->
|
|
155
|
+
<!-- SECTION: INDEX RAPIDE -->
|
|
156
|
+
<!-- ============================================================ -->
|
|
157
|
+
<section id="quick-index">
|
|
158
|
+
<h2>
|
|
159
|
+
<span data-lang="fr">Index rapide des commandes</span>
|
|
160
|
+
<span data-lang="en">Quick Command Index</span>
|
|
161
|
+
</h2>
|
|
162
|
+
|
|
163
|
+
<p data-lang="fr">
|
|
164
|
+
Acces direct a toutes les commandes EF Core. Cliquez sur une commande pour voir sa documentation complete.
|
|
165
|
+
</p>
|
|
166
|
+
<p data-lang="en">
|
|
167
|
+
Direct access to all EF Core commands. Click a command to see its full documentation.
|
|
168
|
+
</p>
|
|
169
|
+
|
|
170
|
+
<div class="table-container">
|
|
171
|
+
<table>
|
|
172
|
+
<thead>
|
|
173
|
+
<tr>
|
|
174
|
+
<th>
|
|
175
|
+
<span data-lang="fr">Commande</span>
|
|
176
|
+
<span data-lang="en">Command</span>
|
|
177
|
+
</th>
|
|
178
|
+
<th>Description</th>
|
|
179
|
+
<th>Agent</th>
|
|
180
|
+
<th>
|
|
181
|
+
<span data-lang="fr">Risque</span>
|
|
182
|
+
<span data-lang="en">Risk</span>
|
|
183
|
+
</th>
|
|
184
|
+
</tr>
|
|
185
|
+
</thead>
|
|
186
|
+
<tbody>
|
|
187
|
+
<tr>
|
|
188
|
+
<td><a href="#cmd-migration"><code>/efcore:migration</code></a></td>
|
|
189
|
+
<td>
|
|
190
|
+
<span data-lang="fr">Creer/recreer la migration unique pour la branche</span>
|
|
191
|
+
<span data-lang="en">Create/recreate the unique migration for the branch</span>
|
|
192
|
+
</td>
|
|
193
|
+
<td><code>efcore-migration</code></td>
|
|
194
|
+
<td><span class="tag tag-workflow">MEDIUM</span></td>
|
|
195
|
+
</tr>
|
|
196
|
+
<tr>
|
|
197
|
+
<td><a href="#cmd-db-status"><code>/efcore:db-status</code></a></td>
|
|
198
|
+
<td>
|
|
199
|
+
<span data-lang="fr">Afficher l'etat des migrations et de la DB</span>
|
|
200
|
+
<span data-lang="en">Show migrations and database status</span>
|
|
201
|
+
</td>
|
|
202
|
+
<td><code>efcore-db-status</code></td>
|
|
203
|
+
<td><span class="tag tag-command">READ</span></td>
|
|
204
|
+
</tr>
|
|
205
|
+
<tr>
|
|
206
|
+
<td><a href="#cmd-db-deploy"><code>/efcore:db-deploy</code></a></td>
|
|
207
|
+
<td>
|
|
208
|
+
<span data-lang="fr">Appliquer les migrations en attente</span>
|
|
209
|
+
<span data-lang="en">Apply pending migrations</span>
|
|
210
|
+
</td>
|
|
211
|
+
<td><code>efcore-db-deploy</code></td>
|
|
212
|
+
<td><span class="tag tag-workflow">MEDIUM</span></td>
|
|
213
|
+
</tr>
|
|
214
|
+
<tr>
|
|
215
|
+
<td><a href="#cmd-db-seed"><code>/efcore:db-seed</code></a></td>
|
|
216
|
+
<td>
|
|
217
|
+
<span data-lang="fr">Peupler la base avec des donnees de test</span>
|
|
218
|
+
<span data-lang="en">Populate database with test data</span>
|
|
219
|
+
</td>
|
|
220
|
+
<td><code>efcore-db-seed</code></td>
|
|
221
|
+
<td><span class="tag tag-workflow">MEDIUM</span></td>
|
|
222
|
+
</tr>
|
|
223
|
+
<tr>
|
|
224
|
+
<td><a href="#cmd-db-reset"><code>/efcore:db-reset</code></a></td>
|
|
225
|
+
<td>
|
|
226
|
+
<span data-lang="fr">Supprimer et recreer la base (DESTRUCTIF)</span>
|
|
227
|
+
<span data-lang="en">Drop and recreate database (DESTRUCTIVE)</span>
|
|
228
|
+
</td>
|
|
229
|
+
<td><code>efcore-db-reset</code></td>
|
|
230
|
+
<td><span class="tag tag-danger">HIGH</span></td>
|
|
231
|
+
</tr>
|
|
232
|
+
<tr>
|
|
233
|
+
<td><a href="#cmd-scan"><code>/efcore:scan</code></a></td>
|
|
234
|
+
<td>
|
|
235
|
+
<span data-lang="fr">Scanner les migrations sur toutes les branches</span>
|
|
236
|
+
<span data-lang="en">Scan migrations across all branches</span>
|
|
237
|
+
</td>
|
|
238
|
+
<td><code>efcore-scan</code></td>
|
|
239
|
+
<td><span class="tag tag-command">READ</span></td>
|
|
240
|
+
</tr>
|
|
241
|
+
<tr>
|
|
242
|
+
<td><a href="#cmd-conflicts"><code>/efcore:conflicts</code></a></td>
|
|
243
|
+
<td>
|
|
244
|
+
<span data-lang="fr">Analyser les conflits avant merge (BLOQUANT)</span>
|
|
245
|
+
<span data-lang="en">Analyze conflicts before merge (BLOCKING)</span>
|
|
246
|
+
</td>
|
|
247
|
+
<td><code>efcore-conflicts</code></td>
|
|
248
|
+
<td><span class="tag tag-command">READ</span></td>
|
|
249
|
+
</tr>
|
|
250
|
+
<tr>
|
|
251
|
+
<td><a href="#cmd-rebase-snapshot"><code>/efcore:rebase-snapshot</code></a></td>
|
|
252
|
+
<td>
|
|
253
|
+
<span data-lang="fr">Rebaser ModelSnapshot sur develop</span>
|
|
254
|
+
<span data-lang="en">Rebase ModelSnapshot on develop</span>
|
|
255
|
+
</td>
|
|
256
|
+
<td><code>efcore-rebase-snapshot</code></td>
|
|
257
|
+
<td><span class="tag tag-warning">MEDIUM</span></td>
|
|
258
|
+
</tr>
|
|
259
|
+
<tr>
|
|
260
|
+
<td><a href="#cmd-squash"><code>/efcore:squash</code></a></td>
|
|
261
|
+
<td>
|
|
262
|
+
<span data-lang="fr">Fusionner plusieurs migrations en une seule</span>
|
|
263
|
+
<span data-lang="en">Merge multiple migrations into one</span>
|
|
264
|
+
</td>
|
|
265
|
+
<td><code>efcore-squash</code></td>
|
|
266
|
+
<td><span class="tag tag-danger">HIGH</span></td>
|
|
267
|
+
</tr>
|
|
268
|
+
</tbody>
|
|
269
|
+
</table>
|
|
270
|
+
</div>
|
|
271
|
+
|
|
272
|
+
<div class="alert alert-info">
|
|
273
|
+
<span class="alert-icon">💡</span>
|
|
274
|
+
<div class="alert-content">
|
|
275
|
+
<h5 data-lang="fr">Workflow typique</h5>
|
|
276
|
+
<h5 data-lang="en">Typical Workflow</h5>
|
|
277
|
+
<p data-lang="fr">
|
|
278
|
+
<code>/efcore:db-status</code> → <code>/efcore:migration</code> → <code>/efcore:db-deploy</code> → <code>/gitflow:3-commit</code>
|
|
279
|
+
</p>
|
|
280
|
+
<p data-lang="en">
|
|
281
|
+
<code>/efcore:db-status</code> → <code>/efcore:migration</code> → <code>/efcore:db-deploy</code> → <code>/gitflow:3-commit</code>
|
|
282
|
+
</p>
|
|
283
|
+
</div>
|
|
284
|
+
</div>
|
|
285
|
+
</section>
|
|
286
|
+
|
|
287
|
+
<!-- ============================================================ -->
|
|
288
|
+
<!-- SECTION: INTRODUCTION -->
|
|
289
|
+
<!-- ============================================================ -->
|
|
290
|
+
<section id="introduction">
|
|
291
|
+
<h2>Introduction</h2>
|
|
292
|
+
<p data-lang="fr">
|
|
293
|
+
Entity Framework Core (EF Core) est l'ORM officiel de Microsoft pour .NET. Claude Tools integre une gestion avancee des migrations EF Core dans le workflow GitFlow, incluant la detection de conflits, la validation des migrations et la generation de scripts SQL idempotents.
|
|
294
|
+
</p>
|
|
295
|
+
<p data-lang="en">
|
|
296
|
+
Entity Framework Core (EF Core) is Microsoft's official ORM for .NET. Claude Tools integrates advanced EF Core migration management into the GitFlow workflow, including conflict detection, migration validation, and idempotent SQL script generation.
|
|
297
|
+
</p>
|
|
298
|
+
|
|
299
|
+
<div class="alert alert-info">
|
|
300
|
+
<span class="alert-icon">💡</span>
|
|
301
|
+
<div class="alert-content">
|
|
302
|
+
<h5 data-lang="fr">Integration automatique</h5>
|
|
303
|
+
<h5 data-lang="en">Automatic Integration</h5>
|
|
304
|
+
<p data-lang="fr">
|
|
305
|
+
Claude Tools detecte automatiquement les projets .NET utilisant EF Core lors de l'initialisation avec <code>/gitflow:1-init</code>.
|
|
306
|
+
</p>
|
|
307
|
+
<p data-lang="en">
|
|
308
|
+
Claude Tools automatically detects .NET projects using EF Core during initialization with <code>/gitflow:1-init</code>.
|
|
309
|
+
</p>
|
|
310
|
+
</div>
|
|
311
|
+
</div>
|
|
312
|
+
|
|
313
|
+
<h3 data-lang="fr">Fonctionnalites principales</h3>
|
|
314
|
+
<h3 data-lang="en">Key Features</h3>
|
|
315
|
+
|
|
316
|
+
<div class="card-grid">
|
|
317
|
+
<div class="card">
|
|
318
|
+
<div class="card-header">
|
|
319
|
+
<div class="card-icon" style="background: var(--primary);">🗄</div>
|
|
320
|
+
<div>
|
|
321
|
+
<div class="card-title" data-lang="fr">1 Migration par Feature</div>
|
|
322
|
+
<div class="card-title" data-lang="en">1 Migration per Feature</div>
|
|
323
|
+
<div class="card-subtitle" data-lang="fr">Regle d'or</div>
|
|
324
|
+
<div class="card-subtitle" data-lang="en">Golden rule</div>
|
|
325
|
+
</div>
|
|
326
|
+
</div>
|
|
327
|
+
<div class="card-body">
|
|
328
|
+
<p data-lang="fr">Chaque branche feature/hotfix a exactement une migration. Si des changements sont necessaires, elle est supprimee et recreee.</p>
|
|
329
|
+
<p data-lang="en">Each feature/hotfix branch has exactly one migration. If changes are needed, it's deleted and recreated.</p>
|
|
330
|
+
</div>
|
|
331
|
+
</div>
|
|
332
|
+
|
|
333
|
+
<div class="card">
|
|
334
|
+
<div class="card-header">
|
|
335
|
+
<div class="card-icon" style="background: var(--success);">🔀</div>
|
|
336
|
+
<div>
|
|
337
|
+
<div class="card-title">Cross-Branch</div>
|
|
338
|
+
<div class="card-subtitle" data-lang="fr">Detection de conflits</div>
|
|
339
|
+
<div class="card-subtitle" data-lang="en">Conflict detection</div>
|
|
340
|
+
</div>
|
|
341
|
+
</div>
|
|
342
|
+
<div class="card-body">
|
|
343
|
+
<p data-lang="fr">Analyse des ModelSnapshots sur toutes les branches actives pour prevenir les conflits avant le merge.</p>
|
|
344
|
+
<p data-lang="en">Analyze ModelSnapshots across all active branches to prevent conflicts before merge.</p>
|
|
345
|
+
</div>
|
|
346
|
+
</div>
|
|
347
|
+
|
|
348
|
+
<div class="card">
|
|
349
|
+
<div class="card-header">
|
|
350
|
+
<div class="card-icon" style="background: var(--warning);">🔒</div>
|
|
351
|
+
<div>
|
|
352
|
+
<div class="card-title" data-lang="fr">Securite</div>
|
|
353
|
+
<div class="card-title" data-lang="en">Safety</div>
|
|
354
|
+
<div class="card-subtitle" data-lang="fr">Operations protegees</div>
|
|
355
|
+
<div class="card-subtitle" data-lang="en">Protected operations</div>
|
|
356
|
+
</div>
|
|
357
|
+
</div>
|
|
358
|
+
<div class="card-body">
|
|
359
|
+
<p data-lang="fr">Backup automatique avant operations destructives. Detection des DropTable, DropColumn, DeleteData.</p>
|
|
360
|
+
<p data-lang="en">Automatic backup before destructive operations. Detection of DropTable, DropColumn, DeleteData.</p>
|
|
361
|
+
</div>
|
|
362
|
+
</div>
|
|
363
|
+
</div>
|
|
364
|
+
</section>
|
|
365
|
+
|
|
366
|
+
<!-- ============================================================ -->
|
|
367
|
+
<!-- SECTION: COMPRENDRE EF CORE -->
|
|
368
|
+
<!-- ============================================================ -->
|
|
369
|
+
<section id="understanding">
|
|
370
|
+
<h2>
|
|
371
|
+
<span data-lang="fr">Comprendre EF Core et les Migrations</span>
|
|
372
|
+
<span data-lang="en">Understanding EF Core and Migrations</span>
|
|
373
|
+
</h2>
|
|
374
|
+
|
|
375
|
+
<h3 data-lang="fr">Qu'est-ce qu'une Migration ?</h3>
|
|
376
|
+
<h3 data-lang="en">What is a Migration?</h3>
|
|
377
|
+
|
|
378
|
+
<p data-lang="fr">
|
|
379
|
+
Une migration EF Core represente un changement incrementiel du schema de votre base de donnees. Elle capture les differences entre l'etat actuel de vos entites C# et l'etat precedent.
|
|
380
|
+
</p>
|
|
381
|
+
<p data-lang="en">
|
|
382
|
+
An EF Core migration represents an incremental change to your database schema. It captures the differences between the current state of your C# entities and the previous state.
|
|
383
|
+
</p>
|
|
384
|
+
|
|
385
|
+
<h3 data-lang="fr">Les 3 fichiers d'une Migration</h3>
|
|
386
|
+
<h3 data-lang="en">The 3 Files of a Migration</h3>
|
|
387
|
+
|
|
388
|
+
<p data-lang="fr">Une migration EF Core valide comprend <strong>3 fichiers</strong> :</p>
|
|
389
|
+
<p data-lang="en">A valid EF Core migration includes <strong>3 files</strong>:</p>
|
|
390
|
+
|
|
391
|
+
<div class="table-container">
|
|
392
|
+
<table>
|
|
393
|
+
<thead>
|
|
394
|
+
<tr>
|
|
395
|
+
<th>Fichier / File</th>
|
|
396
|
+
<th>
|
|
397
|
+
<span data-lang="fr">Description</span>
|
|
398
|
+
<span data-lang="en">Description</span>
|
|
399
|
+
</th>
|
|
400
|
+
<th>
|
|
401
|
+
<span data-lang="fr">Role</span>
|
|
402
|
+
<span data-lang="en">Role</span>
|
|
403
|
+
</th>
|
|
404
|
+
</tr>
|
|
405
|
+
</thead>
|
|
406
|
+
<tbody>
|
|
407
|
+
<tr>
|
|
408
|
+
<td><code>{Timestamp}_{Name}.cs</code></td>
|
|
409
|
+
<td>
|
|
410
|
+
<span data-lang="fr">Migration principale</span>
|
|
411
|
+
<span data-lang="en">Main migration</span>
|
|
412
|
+
</td>
|
|
413
|
+
<td>
|
|
414
|
+
<span data-lang="fr">Contient <code>Up()</code> et <code>Down()</code></span>
|
|
415
|
+
<span data-lang="en">Contains <code>Up()</code> and <code>Down()</code></span>
|
|
416
|
+
</td>
|
|
417
|
+
</tr>
|
|
418
|
+
<tr>
|
|
419
|
+
<td><code>{Timestamp}_{Name}.Designer.cs</code></td>
|
|
420
|
+
<td>
|
|
421
|
+
<span data-lang="fr">Metadonnees</span>
|
|
422
|
+
<span data-lang="en">Metadata</span>
|
|
423
|
+
</td>
|
|
424
|
+
<td>
|
|
425
|
+
<span data-lang="fr">Snapshot du modele au moment de la creation</span>
|
|
426
|
+
<span data-lang="en">Model snapshot at creation time</span>
|
|
427
|
+
</td>
|
|
428
|
+
</tr>
|
|
429
|
+
<tr>
|
|
430
|
+
<td><code>{Context}ModelSnapshot.cs</code></td>
|
|
431
|
+
<td>
|
|
432
|
+
<span data-lang="fr">Etat actuel</span>
|
|
433
|
+
<span data-lang="en">Current state</span>
|
|
434
|
+
</td>
|
|
435
|
+
<td>
|
|
436
|
+
<span data-lang="fr">Modele complet - <strong>source de conflits!</strong></span>
|
|
437
|
+
<span data-lang="en">Full model - <strong>conflict source!</strong></span>
|
|
438
|
+
</td>
|
|
439
|
+
</tr>
|
|
440
|
+
</tbody>
|
|
441
|
+
</table>
|
|
442
|
+
</div>
|
|
443
|
+
|
|
444
|
+
<div class="svg-diagram">
|
|
445
|
+
<svg viewBox="0 0 700 320" xmlns="http://www.w3.org/2000/svg" style="font-family: 'Inter', system-ui, sans-serif;">
|
|
446
|
+
<defs>
|
|
447
|
+
<linearGradient id="migrationGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
448
|
+
<stop offset="0%" style="stop-color:#22c55e"/>
|
|
449
|
+
<stop offset="100%" style="stop-color:#15803d"/>
|
|
450
|
+
</linearGradient>
|
|
451
|
+
<linearGradient id="designerGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
452
|
+
<stop offset="0%" style="stop-color:#3b82f6"/>
|
|
453
|
+
<stop offset="100%" style="stop-color:#1d4ed8"/>
|
|
454
|
+
</linearGradient>
|
|
455
|
+
<linearGradient id="snapshotGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
456
|
+
<stop offset="0%" style="stop-color:#f97316"/>
|
|
457
|
+
<stop offset="100%" style="stop-color:#c2410c"/>
|
|
458
|
+
</linearGradient>
|
|
459
|
+
<filter id="efGlow" x="-20%" y="-20%" width="140%" height="140%">
|
|
460
|
+
<feGaussianBlur stdDeviation="3" result="coloredBlur"/>
|
|
461
|
+
<feMerge>
|
|
462
|
+
<feMergeNode in="coloredBlur"/>
|
|
463
|
+
<feMergeNode in="SourceGraphic"/>
|
|
464
|
+
</feMerge>
|
|
465
|
+
</filter>
|
|
466
|
+
</defs>
|
|
467
|
+
|
|
468
|
+
<!-- Title -->
|
|
469
|
+
<text x="350" y="30" text-anchor="middle" fill="#e2e8f0" font-size="16" font-weight="600">Migration Structure (3 Files)</text>
|
|
470
|
+
|
|
471
|
+
<!-- Migration.cs file -->
|
|
472
|
+
<g transform="translate(50, 60)" filter="url(#efGlow)">
|
|
473
|
+
<rect x="0" y="0" width="180" height="100" rx="8" fill="url(#migrationGrad)"/>
|
|
474
|
+
<rect x="0" y="0" width="180" height="30" rx="8" fill="rgba(0,0,0,0.2)"/>
|
|
475
|
+
<text x="90" y="20" text-anchor="middle" fill="white" font-size="11" font-weight="600">{Name}.cs</text>
|
|
476
|
+
<text x="15" y="52" fill="rgba(255,255,255,0.9)" font-size="10">Up()</text>
|
|
477
|
+
<text x="15" y="68" fill="rgba(255,255,255,0.7)" font-size="9">→ Apply changes</text>
|
|
478
|
+
<text x="15" y="85" fill="rgba(255,255,255,0.9)" font-size="10">Down()</text>
|
|
479
|
+
<text x="15" y="98" fill="rgba(255,255,255,0.7)" font-size="9">→ Rollback changes</text>
|
|
480
|
+
</g>
|
|
481
|
+
|
|
482
|
+
<!-- Designer.cs file -->
|
|
483
|
+
<g transform="translate(260, 60)" filter="url(#efGlow)">
|
|
484
|
+
<rect x="0" y="0" width="180" height="100" rx="8" fill="url(#designerGrad)"/>
|
|
485
|
+
<rect x="0" y="0" width="180" height="30" rx="8" fill="rgba(0,0,0,0.2)"/>
|
|
486
|
+
<text x="90" y="20" text-anchor="middle" fill="white" font-size="11" font-weight="600">{Name}.Designer.cs</text>
|
|
487
|
+
<text x="15" y="52" fill="rgba(255,255,255,0.9)" font-size="10">Metadata</text>
|
|
488
|
+
<text x="15" y="68" fill="rgba(255,255,255,0.7)" font-size="9">→ MigrationId</text>
|
|
489
|
+
<text x="15" y="82" fill="rgba(255,255,255,0.7)" font-size="9">→ ProductVersion</text>
|
|
490
|
+
<text x="15" y="98" fill="rgba(255,255,255,0.7)" font-size="9">→ Model snapshot at time</text>
|
|
491
|
+
</g>
|
|
492
|
+
|
|
493
|
+
<!-- ModelSnapshot.cs file -->
|
|
494
|
+
<g transform="translate(470, 60)" filter="url(#efGlow)">
|
|
495
|
+
<rect x="0" y="0" width="180" height="100" rx="8" fill="url(#snapshotGrad)"/>
|
|
496
|
+
<rect x="0" y="0" width="180" height="30" rx="8" fill="rgba(0,0,0,0.2)"/>
|
|
497
|
+
<text x="90" y="20" text-anchor="middle" fill="white" font-size="11" font-weight="600">ModelSnapshot.cs</text>
|
|
498
|
+
<text x="15" y="52" fill="rgba(255,255,255,0.9)" font-size="10">Current State</text>
|
|
499
|
+
<text x="15" y="68" fill="rgba(255,255,255,0.7)" font-size="9">→ Full model definition</text>
|
|
500
|
+
<text x="15" y="82" fill="rgba(255,255,255,0.7)" font-size="9">→ All entities & relations</text>
|
|
501
|
+
<text x="15" y="98" fill="rgba(255,255,255,0.7)" font-size="9">→ ⚠️ Conflict source</text>
|
|
502
|
+
</g>
|
|
503
|
+
|
|
504
|
+
<!-- Connection arrows -->
|
|
505
|
+
<path d="M 230 110 L 260 110" stroke="#94a3b8" stroke-width="2" fill="none"/>
|
|
506
|
+
<polygon points="258,105 268,110 258,115" fill="#94a3b8"/>
|
|
507
|
+
|
|
508
|
+
<path d="M 440 110 L 470 110" stroke="#94a3b8" stroke-width="2" fill="none"/>
|
|
509
|
+
<polygon points="468,105 478,110 468,115" fill="#94a3b8"/>
|
|
510
|
+
|
|
511
|
+
<!-- Flow explanation -->
|
|
512
|
+
<g transform="translate(50, 190)">
|
|
513
|
+
<rect x="0" y="0" width="600" height="110" rx="8" fill="#1e293b" stroke="#334155" stroke-width="1"/>
|
|
514
|
+
|
|
515
|
+
<!-- Step 1 -->
|
|
516
|
+
<circle cx="50" cy="35" r="18" fill="#22c55e"/>
|
|
517
|
+
<text x="50" y="40" text-anchor="middle" fill="white" font-size="12" font-weight="700">1</text>
|
|
518
|
+
<text x="85" y="30" fill="#e2e8f0" font-size="11" font-weight="500">Model Change</text>
|
|
519
|
+
<text x="85" y="45" fill="#94a3b8" font-size="9">Edit your DbContext entities</text>
|
|
520
|
+
|
|
521
|
+
<!-- Arrow -->
|
|
522
|
+
<path d="M 180 35 L 210 35" stroke="#94a3b8" stroke-width="1.5"/>
|
|
523
|
+
<polygon points="208,31 218,35 208,39" fill="#94a3b8"/>
|
|
524
|
+
|
|
525
|
+
<!-- Step 2 -->
|
|
526
|
+
<circle cx="240" cy="35" r="18" fill="#3b82f6"/>
|
|
527
|
+
<text x="240" y="40" text-anchor="middle" fill="white" font-size="12" font-weight="700">2</text>
|
|
528
|
+
<text x="275" y="30" fill="#e2e8f0" font-size="11" font-weight="500">Add Migration</text>
|
|
529
|
+
<text x="275" y="45" fill="#94a3b8" font-size="9">dotnet ef migrations add</text>
|
|
530
|
+
|
|
531
|
+
<!-- Arrow -->
|
|
532
|
+
<path d="M 380 35 L 410 35" stroke="#94a3b8" stroke-width="1.5"/>
|
|
533
|
+
<polygon points="408,31 418,35 408,39" fill="#94a3b8"/>
|
|
534
|
+
|
|
535
|
+
<!-- Step 3 -->
|
|
536
|
+
<circle cx="440" cy="35" r="18" fill="#f97316"/>
|
|
537
|
+
<text x="440" y="40" text-anchor="middle" fill="white" font-size="12" font-weight="700">3</text>
|
|
538
|
+
<text x="475" y="30" fill="#e2e8f0" font-size="11" font-weight="500">3 Files Generated</text>
|
|
539
|
+
<text x="475" y="45" fill="#94a3b8" font-size="9">Commit all together!</text>
|
|
540
|
+
|
|
541
|
+
<!-- Warning box -->
|
|
542
|
+
<rect x="20" y="65" width="560" height="35" rx="4" fill="rgba(249, 115, 22, 0.1)" stroke="#f97316" stroke-width="1"/>
|
|
543
|
+
<text x="40" y="85" fill="#f97316" font-size="10">⚠️</text>
|
|
544
|
+
<text x="60" y="85" fill="#f97316" font-size="10" font-weight="500">ModelSnapshot.cs is regenerated on EVERY migration - source of merge conflicts!</text>
|
|
545
|
+
</g>
|
|
546
|
+
</svg>
|
|
547
|
+
</div>
|
|
548
|
+
|
|
549
|
+
<div class="code-block">
|
|
550
|
+
<pre><code>Migrations/
|
|
551
|
+
├── 20240101120000_InitialCreate.cs
|
|
552
|
+
├── 20240101120000_InitialCreate.Designer.cs
|
|
553
|
+
├── 20240115150000_AddUserTable.cs
|
|
554
|
+
├── 20240115150000_AddUserTable.Designer.cs
|
|
555
|
+
└── ApplicationDbContextModelSnapshot.cs ← Fichier critique</code></pre>
|
|
556
|
+
</div>
|
|
557
|
+
|
|
558
|
+
<div class="alert alert-warning">
|
|
559
|
+
<span class="alert-icon">⚠</span>
|
|
560
|
+
<div class="alert-content">
|
|
561
|
+
<h5>ModelSnapshot - Le point de conflit</h5>
|
|
562
|
+
<p data-lang="fr">
|
|
563
|
+
Le fichier <code>ModelSnapshot.cs</code> represente l'etat actuel du modele. Il est regenere a <strong>chaque</strong> nouvelle migration. C'est la source principale de conflits lors des merges entre branches.
|
|
564
|
+
</p>
|
|
565
|
+
<p data-lang="en">
|
|
566
|
+
The <code>ModelSnapshot.cs</code> file represents the current model state. It's regenerated on <strong>every</strong> new migration. It's the main source of conflicts when merging branches.
|
|
567
|
+
</p>
|
|
568
|
+
</div>
|
|
569
|
+
</div>
|
|
570
|
+
</section>
|
|
571
|
+
|
|
572
|
+
<!-- ============================================================ -->
|
|
573
|
+
<!-- SECTION: REGLE 1 MIGRATION PAR FEATURE -->
|
|
574
|
+
<!-- ============================================================ -->
|
|
575
|
+
<section id="one-migration-rule">
|
|
576
|
+
<h2>
|
|
577
|
+
<span data-lang="fr">La regle "1 Migration par Feature"</span>
|
|
578
|
+
<span data-lang="en">The "1 Migration per Feature" Rule</span>
|
|
579
|
+
</h2>
|
|
580
|
+
|
|
581
|
+
<div class="alert alert-info">
|
|
582
|
+
<span class="alert-icon">🎯</span>
|
|
583
|
+
<div class="alert-content">
|
|
584
|
+
<h5 data-lang="fr">Regle d'or</h5>
|
|
585
|
+
<h5 data-lang="en">Golden Rule</h5>
|
|
586
|
+
<p data-lang="fr">
|
|
587
|
+
<strong>Chaque branche feature/hotfix doit avoir exactement 1 seule migration.</strong> Si elle existe deja et que vous devez la modifier, supprimez-la et recreez-la.
|
|
588
|
+
</p>
|
|
589
|
+
<p data-lang="en">
|
|
590
|
+
<strong>Each feature/hotfix branch must have exactly 1 migration.</strong> If it already exists and you need to modify it, delete and recreate it.
|
|
591
|
+
</p>
|
|
592
|
+
</div>
|
|
593
|
+
</div>
|
|
594
|
+
|
|
595
|
+
<h3 data-lang="fr">Pourquoi cette regle ?</h3>
|
|
596
|
+
<h3 data-lang="en">Why this rule?</h3>
|
|
597
|
+
|
|
598
|
+
<div class="table-container">
|
|
599
|
+
<table>
|
|
600
|
+
<thead>
|
|
601
|
+
<tr>
|
|
602
|
+
<th>
|
|
603
|
+
<span data-lang="fr">Probleme</span>
|
|
604
|
+
<span data-lang="en">Problem</span>
|
|
605
|
+
</th>
|
|
606
|
+
<th>
|
|
607
|
+
<span data-lang="fr">Solution avec 1 migration</span>
|
|
608
|
+
<span data-lang="en">Solution with 1 migration</span>
|
|
609
|
+
</th>
|
|
610
|
+
</tr>
|
|
611
|
+
</thead>
|
|
612
|
+
<tbody>
|
|
613
|
+
<tr>
|
|
614
|
+
<td>
|
|
615
|
+
<span data-lang="fr">Conflits de merge sur ModelSnapshot</span>
|
|
616
|
+
<span data-lang="en">ModelSnapshot merge conflicts</span>
|
|
617
|
+
</td>
|
|
618
|
+
<td>
|
|
619
|
+
<span data-lang="fr">1 seul point de conflit, facile a resoudre</span>
|
|
620
|
+
<span data-lang="en">Single conflict point, easy to resolve</span>
|
|
621
|
+
</td>
|
|
622
|
+
</tr>
|
|
623
|
+
<tr>
|
|
624
|
+
<td>
|
|
625
|
+
<span data-lang="fr">Historique de migrations pollue</span>
|
|
626
|
+
<span data-lang="en">Polluted migration history</span>
|
|
627
|
+
</td>
|
|
628
|
+
<td>
|
|
629
|
+
<span data-lang="fr">Historique propre et lisible</span>
|
|
630
|
+
<span data-lang="en">Clean and readable history</span>
|
|
631
|
+
</td>
|
|
632
|
+
</tr>
|
|
633
|
+
<tr>
|
|
634
|
+
<td>
|
|
635
|
+
<span data-lang="fr">Ordre de migrations complexe</span>
|
|
636
|
+
<span data-lang="en">Complex migration ordering</span>
|
|
637
|
+
</td>
|
|
638
|
+
<td>
|
|
639
|
+
<span data-lang="fr">Ordre simple : 1 feature = 1 migration</span>
|
|
640
|
+
<span data-lang="en">Simple order: 1 feature = 1 migration</span>
|
|
641
|
+
</td>
|
|
642
|
+
</tr>
|
|
643
|
+
<tr>
|
|
644
|
+
<td>
|
|
645
|
+
<span data-lang="fr">Rollback difficile</span>
|
|
646
|
+
<span data-lang="en">Difficult rollback</span>
|
|
647
|
+
</td>
|
|
648
|
+
<td>
|
|
649
|
+
<span data-lang="fr">Rollback simple de la feature entiere</span>
|
|
650
|
+
<span data-lang="en">Simple rollback of entire feature</span>
|
|
651
|
+
</td>
|
|
652
|
+
</tr>
|
|
653
|
+
</tbody>
|
|
654
|
+
</table>
|
|
655
|
+
</div>
|
|
656
|
+
|
|
657
|
+
<h3 data-lang="fr">Pattern de nommage</h3>
|
|
658
|
+
<h3 data-lang="en">Naming Pattern</h3>
|
|
659
|
+
|
|
660
|
+
<div class="code-block">
|
|
661
|
+
<pre><code>{BranchType}_{Version}_{BranchName}_{Description}</code></pre>
|
|
662
|
+
</div>
|
|
663
|
+
|
|
664
|
+
<div class="table-container">
|
|
665
|
+
<table>
|
|
666
|
+
<thead>
|
|
667
|
+
<tr>
|
|
668
|
+
<th>
|
|
669
|
+
<span data-lang="fr">Branche</span>
|
|
670
|
+
<span data-lang="en">Branch</span>
|
|
671
|
+
</th>
|
|
672
|
+
<th>Version</th>
|
|
673
|
+
<th>Description</th>
|
|
674
|
+
<th>
|
|
675
|
+
<span data-lang="fr">Nom genere</span>
|
|
676
|
+
<span data-lang="en">Generated name</span>
|
|
677
|
+
</th>
|
|
678
|
+
</tr>
|
|
679
|
+
</thead>
|
|
680
|
+
<tbody>
|
|
681
|
+
<tr>
|
|
682
|
+
<td><code>feature/user-auth</code></td>
|
|
683
|
+
<td>1.2.0</td>
|
|
684
|
+
<td>AddRolesTable</td>
|
|
685
|
+
<td><code>Feature_1_2_0_UserAuth_AddRolesTable</code></td>
|
|
686
|
+
</tr>
|
|
687
|
+
<tr>
|
|
688
|
+
<td><code>hotfix/login-fix</code></td>
|
|
689
|
+
<td>1.2.1</td>
|
|
690
|
+
<td>FixNullEmail</td>
|
|
691
|
+
<td><code>Hotfix_1_2_1_LoginFix_FixNullEmail</code></td>
|
|
692
|
+
</tr>
|
|
693
|
+
<tr>
|
|
694
|
+
<td><code>release/v1.3.0</code></td>
|
|
695
|
+
<td>1.3.0</td>
|
|
696
|
+
<td>Initial</td>
|
|
697
|
+
<td><code>Release_1_3_0_Initial</code></td>
|
|
698
|
+
</tr>
|
|
699
|
+
</tbody>
|
|
700
|
+
</table>
|
|
701
|
+
</div>
|
|
702
|
+
|
|
703
|
+
<h3 data-lang="fr">Workflow pratique</h3>
|
|
704
|
+
<h3 data-lang="en">Practical Workflow</h3>
|
|
705
|
+
|
|
706
|
+
<div class="code-block">
|
|
707
|
+
<button class="copy-btn">Copy</button>
|
|
708
|
+
<pre><code># Situation: You already have a migration and need to modify the model
|
|
709
|
+
|
|
710
|
+
# 1. Check current state
|
|
711
|
+
/efcore:db-status
|
|
712
|
+
|
|
713
|
+
# 2. See there's already 1 migration for this branch
|
|
714
|
+
# Output: "1 migration for feature/user-auth"
|
|
715
|
+
|
|
716
|
+
# 3. Create/Recreate migration (deletes old one automatically)
|
|
717
|
+
/efcore:migration
|
|
718
|
+
|
|
719
|
+
# 4. Choose "Recreate" when prompted
|
|
720
|
+
# 5. Enter description (e.g., "AddRolesTable")
|
|
721
|
+
# 6. Apply to local DB
|
|
722
|
+
/efcore:db-deploy
|
|
723
|
+
|
|
724
|
+
# 7. Commit
|
|
725
|
+
/gitflow:3-commit</code></pre>
|
|
726
|
+
</div>
|
|
727
|
+
</section>
|
|
728
|
+
|
|
729
|
+
<!-- ============================================================ -->
|
|
730
|
+
<!-- SECTION: COMMANDES -->
|
|
731
|
+
<!-- ============================================================ -->
|
|
732
|
+
<section id="commands">
|
|
733
|
+
<h2>
|
|
734
|
+
<span data-lang="fr">Documentation des Commandes</span>
|
|
735
|
+
<span data-lang="en">Command Documentation</span>
|
|
736
|
+
</h2>
|
|
737
|
+
|
|
738
|
+
<p data-lang="fr">
|
|
739
|
+
Claude Tools fournit 9 commandes specialisees pour gerer les migrations EF Core. Chaque commande utilise un agent dedie optimise pour sa tache.
|
|
740
|
+
</p>
|
|
741
|
+
<p data-lang="en">
|
|
742
|
+
Claude Tools provides 9 specialized commands for EF Core migration management. Each command uses a dedicated agent optimized for its task.
|
|
743
|
+
</p>
|
|
744
|
+
|
|
745
|
+
<!-- ==================== /efcore:migration ==================== -->
|
|
746
|
+
<div class="command-card" id="cmd-migration">
|
|
747
|
+
<div class="command-header">
|
|
748
|
+
<code class="command-name">/efcore:migration</code>
|
|
749
|
+
<span class="tag tag-workflow">MEDIUM</span>
|
|
750
|
+
</div>
|
|
751
|
+
<div class="command-body">
|
|
752
|
+
<p data-lang="fr">
|
|
753
|
+
Cette commande applique la regle d'or "1 migration par feature" : chaque branche feature ou hotfix ne doit avoir qu'une seule migration. Si vous modifiez le modele de donnees plusieurs fois pendant le developpement, la commande detecte la migration existante, la supprime, et en cree une nouvelle qui consolide tous les changements. Avant de creer, elle effectue une validation cross-branch pour detecter les conflits potentiels avec d'autres branches actives. Le nom de migration suit un pattern standardise incluant le type de branche, la version, et une description. Cette approche garantit un historique de migrations propre et evite les conflits lors des merges.
|
|
754
|
+
</p>
|
|
755
|
+
<p data-lang="en">
|
|
756
|
+
This command enforces the "1 migration per feature" golden rule: each feature or hotfix branch should have only one migration. If you modify the data model multiple times during development, the command detects the existing migration, deletes it, and creates a new one that consolidates all changes. Before creating, it performs cross-branch validation to detect potential conflicts with other active branches. The migration name follows a standardized pattern including branch type, version, and description. This approach ensures a clean migration history and prevents conflicts during merges.
|
|
757
|
+
</p>
|
|
758
|
+
|
|
759
|
+
<div class="table-container">
|
|
760
|
+
<table>
|
|
761
|
+
<tbody>
|
|
762
|
+
<tr>
|
|
763
|
+
<td><strong>Agent</strong></td>
|
|
764
|
+
<td><code>efcore-migration</code></td>
|
|
765
|
+
</tr>
|
|
766
|
+
<tr>
|
|
767
|
+
<td><strong>Model</strong></td>
|
|
768
|
+
<td>sonnet</td>
|
|
769
|
+
</tr>
|
|
770
|
+
<tr>
|
|
771
|
+
<td><strong>Tools</strong></td>
|
|
772
|
+
<td>Bash, Glob, Read, Edit</td>
|
|
773
|
+
</tr>
|
|
774
|
+
</tbody>
|
|
775
|
+
</table>
|
|
776
|
+
</div>
|
|
777
|
+
|
|
778
|
+
<h4 data-lang="fr">Workflow en 9 etapes</h4>
|
|
779
|
+
<h4 data-lang="en">9-Step Workflow</h4>
|
|
780
|
+
|
|
781
|
+
<div class="workflow-stepper-vertical" data-lang="fr">
|
|
782
|
+
<div class="step-item">
|
|
783
|
+
<div class="step-number step-validate">1</div>
|
|
784
|
+
<div class="step-content">
|
|
785
|
+
<div class="step-title">Cross-Branch</div>
|
|
786
|
+
<div class="step-desc">Verifie les conflits (v1.2)</div>
|
|
787
|
+
</div>
|
|
788
|
+
</div>
|
|
789
|
+
<div class="step-item">
|
|
790
|
+
<div class="step-number step-analyze">2</div>
|
|
791
|
+
<div class="step-content">
|
|
792
|
+
<div class="step-title">Contexte Git</div>
|
|
793
|
+
<div class="step-desc">Branche, type, version</div>
|
|
794
|
+
</div>
|
|
795
|
+
</div>
|
|
796
|
+
<div class="step-item">
|
|
797
|
+
<div class="step-number step-detect">3</div>
|
|
798
|
+
<div class="step-content">
|
|
799
|
+
<div class="step-title">Detection</div>
|
|
800
|
+
<div class="step-desc">Trouver le .csproj EF Core</div>
|
|
801
|
+
</div>
|
|
802
|
+
</div>
|
|
803
|
+
<div class="step-item">
|
|
804
|
+
<div class="step-number step-search">4</div>
|
|
805
|
+
<div class="step-content">
|
|
806
|
+
<div class="step-title">Recherche</div>
|
|
807
|
+
<div class="step-desc">Migration existante?</div>
|
|
808
|
+
</div>
|
|
809
|
+
</div>
|
|
810
|
+
<div class="step-item">
|
|
811
|
+
<div class="step-number step-decision">5</div>
|
|
812
|
+
<div class="step-content">
|
|
813
|
+
<div class="step-title">Decision</div>
|
|
814
|
+
<div class="step-desc">Creer ou Recreer</div>
|
|
815
|
+
</div>
|
|
816
|
+
</div>
|
|
817
|
+
<div class="step-item">
|
|
818
|
+
<div class="step-number step-input">6</div>
|
|
819
|
+
<div class="step-content">
|
|
820
|
+
<div class="step-title">Description</div>
|
|
821
|
+
<div class="step-desc">Add, Update, Fix, Remove</div>
|
|
822
|
+
</div>
|
|
823
|
+
</div>
|
|
824
|
+
<div class="step-item">
|
|
825
|
+
<div class="step-number step-generate">7</div>
|
|
826
|
+
<div class="step-content">
|
|
827
|
+
<div class="step-title">Nommage</div>
|
|
828
|
+
<div class="step-desc">Pattern standardise</div>
|
|
829
|
+
</div>
|
|
830
|
+
</div>
|
|
831
|
+
<div class="step-item">
|
|
832
|
+
<div class="step-number step-create">8</div>
|
|
833
|
+
<div class="step-content">
|
|
834
|
+
<div class="step-title">Creation</div>
|
|
835
|
+
<div class="step-desc">dotnet ef migrations add</div>
|
|
836
|
+
</div>
|
|
837
|
+
</div>
|
|
838
|
+
<div class="step-item">
|
|
839
|
+
<div class="step-number step-confirm">9</div>
|
|
840
|
+
<div class="step-content">
|
|
841
|
+
<div class="step-title">Validation</div>
|
|
842
|
+
<div class="step-desc">Apercu et confirmation</div>
|
|
843
|
+
</div>
|
|
844
|
+
</div>
|
|
845
|
+
</div>
|
|
846
|
+
|
|
847
|
+
<div class="workflow-stepper-vertical" data-lang="en">
|
|
848
|
+
<div class="step-item">
|
|
849
|
+
<div class="step-number step-validate">1</div>
|
|
850
|
+
<div class="step-content">
|
|
851
|
+
<div class="step-title">Cross-Branch</div>
|
|
852
|
+
<div class="step-desc">Check conflicts (v1.2)</div>
|
|
853
|
+
</div>
|
|
854
|
+
</div>
|
|
855
|
+
<div class="step-item">
|
|
856
|
+
<div class="step-number step-analyze">2</div>
|
|
857
|
+
<div class="step-content">
|
|
858
|
+
<div class="step-title">Git Context</div>
|
|
859
|
+
<div class="step-desc">Branch, type, version</div>
|
|
860
|
+
</div>
|
|
861
|
+
</div>
|
|
862
|
+
<div class="step-item">
|
|
863
|
+
<div class="step-number step-detect">3</div>
|
|
864
|
+
<div class="step-content">
|
|
865
|
+
<div class="step-title">Detection</div>
|
|
866
|
+
<div class="step-desc">Find EF Core .csproj</div>
|
|
867
|
+
</div>
|
|
868
|
+
</div>
|
|
869
|
+
<div class="step-item">
|
|
870
|
+
<div class="step-number step-search">4</div>
|
|
871
|
+
<div class="step-content">
|
|
872
|
+
<div class="step-title">Search</div>
|
|
873
|
+
<div class="step-desc">Existing migration?</div>
|
|
874
|
+
</div>
|
|
875
|
+
</div>
|
|
876
|
+
<div class="step-item">
|
|
877
|
+
<div class="step-number step-decision">5</div>
|
|
878
|
+
<div class="step-content">
|
|
879
|
+
<div class="step-title">Decision</div>
|
|
880
|
+
<div class="step-desc">Create or Recreate</div>
|
|
881
|
+
</div>
|
|
882
|
+
</div>
|
|
883
|
+
<div class="step-item">
|
|
884
|
+
<div class="step-number step-input">6</div>
|
|
885
|
+
<div class="step-content">
|
|
886
|
+
<div class="step-title">Description</div>
|
|
887
|
+
<div class="step-desc">Add, Update, Fix, Remove</div>
|
|
888
|
+
</div>
|
|
889
|
+
</div>
|
|
890
|
+
<div class="step-item">
|
|
891
|
+
<div class="step-number step-generate">7</div>
|
|
892
|
+
<div class="step-content">
|
|
893
|
+
<div class="step-title">Naming</div>
|
|
894
|
+
<div class="step-desc">Standardized pattern</div>
|
|
895
|
+
</div>
|
|
896
|
+
</div>
|
|
897
|
+
<div class="step-item">
|
|
898
|
+
<div class="step-number step-create">8</div>
|
|
899
|
+
<div class="step-content">
|
|
900
|
+
<div class="step-title">Creation</div>
|
|
901
|
+
<div class="step-desc">dotnet ef migrations add</div>
|
|
902
|
+
</div>
|
|
903
|
+
</div>
|
|
904
|
+
<div class="step-item">
|
|
905
|
+
<div class="step-number step-confirm">9</div>
|
|
906
|
+
<div class="step-content">
|
|
907
|
+
<div class="step-title">Validation</div>
|
|
908
|
+
<div class="step-desc">Preview and confirm</div>
|
|
909
|
+
</div>
|
|
910
|
+
</div>
|
|
911
|
+
</div>
|
|
912
|
+
|
|
913
|
+
<h4>Options</h4>
|
|
914
|
+
<div class="table-container">
|
|
915
|
+
<table>
|
|
916
|
+
<thead>
|
|
917
|
+
<tr>
|
|
918
|
+
<th>Option</th>
|
|
919
|
+
<th>Description</th>
|
|
920
|
+
</tr>
|
|
921
|
+
</thead>
|
|
922
|
+
<tbody>
|
|
923
|
+
<tr>
|
|
924
|
+
<td><code>--name {name}</code></td>
|
|
925
|
+
<td>
|
|
926
|
+
<span data-lang="fr">Forcer un nom specifique</span>
|
|
927
|
+
<span data-lang="en">Force a specific name</span>
|
|
928
|
+
</td>
|
|
929
|
+
</tr>
|
|
930
|
+
<tr>
|
|
931
|
+
<td><code>--no-apply</code></td>
|
|
932
|
+
<td>
|
|
933
|
+
<span data-lang="fr">Ne pas proposer d'appliquer</span>
|
|
934
|
+
<span data-lang="en">Don't offer to apply</span>
|
|
935
|
+
</td>
|
|
936
|
+
</tr>
|
|
937
|
+
<tr>
|
|
938
|
+
<td><code>--force</code></td>
|
|
939
|
+
<td>
|
|
940
|
+
<span data-lang="fr">Supprimer l'existante sans confirmation</span>
|
|
941
|
+
<span data-lang="en">Delete existing without confirmation</span>
|
|
942
|
+
</td>
|
|
943
|
+
</tr>
|
|
944
|
+
<tr>
|
|
945
|
+
<td><code>--no-cross-check</code></td>
|
|
946
|
+
<td>
|
|
947
|
+
<span data-lang="fr">Desactiver validation cross-branch</span>
|
|
948
|
+
<span data-lang="en">Disable cross-branch validation</span>
|
|
949
|
+
</td>
|
|
950
|
+
</tr>
|
|
951
|
+
<tr>
|
|
952
|
+
<td><code>--rebase-first</code></td>
|
|
953
|
+
<td>
|
|
954
|
+
<span data-lang="fr">Executer rebase-snapshot automatiquement si conflit</span>
|
|
955
|
+
<span data-lang="en">Run rebase-snapshot automatically if conflict</span>
|
|
956
|
+
</td>
|
|
957
|
+
</tr>
|
|
958
|
+
</tbody>
|
|
959
|
+
</table>
|
|
960
|
+
</div>
|
|
961
|
+
|
|
962
|
+
<div class="code-block">
|
|
963
|
+
<button class="copy-btn">Copy</button>
|
|
964
|
+
<pre><code># Usage example
|
|
965
|
+
/efcore:migration
|
|
966
|
+
|
|
967
|
+
# With options
|
|
968
|
+
/efcore:migration --force --no-apply</code></pre>
|
|
969
|
+
</div>
|
|
970
|
+
</div>
|
|
971
|
+
</div>
|
|
972
|
+
|
|
973
|
+
<!-- ==================== /efcore:db-status ==================== -->
|
|
974
|
+
<div class="command-card" id="cmd-db-status">
|
|
975
|
+
<div class="command-header">
|
|
976
|
+
<code class="command-name">/efcore:db-status</code>
|
|
977
|
+
<span class="tag tag-command">READ</span>
|
|
978
|
+
</div>
|
|
979
|
+
<div class="command-body">
|
|
980
|
+
<p data-lang="fr">
|
|
981
|
+
Cette commande de diagnostic rapide (read-only) fournit une vue complete de l'etat des migrations EF Core et de la base de donnees. Elle detecte automatiquement le fichier de configuration (appsettings.Local.json en priorite), teste la connexion a la base, et liste toutes les migrations en distinguant celles appliquees de celles en attente. Elle verifie egalement le respect de la regle "1 migration par feature" en analysant les migrations presentes sur la branche courante. Utilisez cette commande avant toute operation pour connaitre l'etat exact du systeme.
|
|
982
|
+
</p>
|
|
983
|
+
<p data-lang="en">
|
|
984
|
+
This quick diagnostic command (read-only) provides a complete view of EF Core migrations and database state. It automatically detects the configuration file (appsettings.Local.json as priority), tests database connection, and lists all migrations distinguishing applied from pending ones. It also verifies "1 migration per feature" rule compliance by analyzing migrations present on the current branch. Use this command before any operation to know the exact system state.
|
|
985
|
+
</p>
|
|
986
|
+
|
|
987
|
+
<div class="table-container">
|
|
988
|
+
<table>
|
|
989
|
+
<tbody>
|
|
990
|
+
<tr>
|
|
991
|
+
<td><strong>Agent</strong></td>
|
|
992
|
+
<td><code>efcore-db-status</code></td>
|
|
993
|
+
</tr>
|
|
994
|
+
<tr>
|
|
995
|
+
<td><strong>Model</strong></td>
|
|
996
|
+
<td>haiku (fast)</td>
|
|
997
|
+
</tr>
|
|
998
|
+
<tr>
|
|
999
|
+
<td><strong>Tools</strong></td>
|
|
1000
|
+
<td>Bash, Glob</td>
|
|
1001
|
+
</tr>
|
|
1002
|
+
</tbody>
|
|
1003
|
+
</table>
|
|
1004
|
+
</div>
|
|
1005
|
+
|
|
1006
|
+
<h4 data-lang="fr">Informations affichees</h4>
|
|
1007
|
+
<h4 data-lang="en">Displayed Information</h4>
|
|
1008
|
+
|
|
1009
|
+
<div class="feature-grid">
|
|
1010
|
+
<div class="feature-item">
|
|
1011
|
+
<span class="feature-icon">⚙</span>
|
|
1012
|
+
<span class="feature-text" data-lang="fr">Configuration utilisee (appsettings.Local.json, etc.)</span>
|
|
1013
|
+
<span class="feature-text" data-lang="en">Configuration used (appsettings.Local.json, etc.)</span>
|
|
1014
|
+
</div>
|
|
1015
|
+
<div class="feature-item">
|
|
1016
|
+
<span class="feature-icon">🔗</span>
|
|
1017
|
+
<span class="feature-text" data-lang="fr">Statut de connexion a la base</span>
|
|
1018
|
+
<span class="feature-text" data-lang="en">Database connection status</span>
|
|
1019
|
+
</div>
|
|
1020
|
+
<div class="feature-item">
|
|
1021
|
+
<span class="feature-icon">📊</span>
|
|
1022
|
+
<span class="feature-text" data-lang="fr">Nombre de migrations (total, appliquees, en attente)</span>
|
|
1023
|
+
<span class="feature-text" data-lang="en">Migration count (total, applied, pending)</span>
|
|
1024
|
+
</div>
|
|
1025
|
+
<div class="feature-item">
|
|
1026
|
+
<span class="feature-icon">✅</span>
|
|
1027
|
+
<span class="feature-text" data-lang="fr">Verification de la regle "1 migration par feature"</span>
|
|
1028
|
+
<span class="feature-text" data-lang="en">"1 migration per feature" rule verification</span>
|
|
1029
|
+
</div>
|
|
1030
|
+
<div class="feature-item">
|
|
1031
|
+
<span class="feature-icon">🗃</span>
|
|
1032
|
+
<span class="feature-text" data-lang="fr">Taille de la base et nombre de tables</span>
|
|
1033
|
+
<span class="feature-text" data-lang="en">Database size and table count</span>
|
|
1034
|
+
</div>
|
|
1035
|
+
</div>
|
|
1036
|
+
|
|
1037
|
+
<div class="code-block">
|
|
1038
|
+
<pre><code>================================================================================
|
|
1039
|
+
EF CORE - DATABASE STATUS
|
|
1040
|
+
================================================================================
|
|
1041
|
+
|
|
1042
|
+
PROJET
|
|
1043
|
+
Nom: MyApp.Data
|
|
1044
|
+
Config: appsettings.Local.json
|
|
1045
|
+
DbContext: ApplicationDbContext
|
|
1046
|
+
|
|
1047
|
+
CONNEXION
|
|
1048
|
+
Status: OK
|
|
1049
|
+
Server: localhost
|
|
1050
|
+
Database: MyAppDb
|
|
1051
|
+
|
|
1052
|
+
MIGRATIONS
|
|
1053
|
+
Total: 12
|
|
1054
|
+
Appliquees: 11
|
|
1055
|
+
En attente: 1
|
|
1056
|
+
|
|
1057
|
+
REGLE "1 MIGRATION PAR FEATURE"
|
|
1058
|
+
Branche: feature/user-auth
|
|
1059
|
+
Migrations: 1 pour cette branche
|
|
1060
|
+
Regle respectee
|
|
1061
|
+
|
|
1062
|
+
================================================================================</code></pre>
|
|
1063
|
+
</div>
|
|
1064
|
+
|
|
1065
|
+
<h4>Options</h4>
|
|
1066
|
+
<div class="table-container">
|
|
1067
|
+
<table>
|
|
1068
|
+
<thead>
|
|
1069
|
+
<tr>
|
|
1070
|
+
<th>Option</th>
|
|
1071
|
+
<th>Description</th>
|
|
1072
|
+
</tr>
|
|
1073
|
+
</thead>
|
|
1074
|
+
<tbody>
|
|
1075
|
+
<tr>
|
|
1076
|
+
<td><code>--verbose</code></td>
|
|
1077
|
+
<td>
|
|
1078
|
+
<span data-lang="fr">Afficher toutes les migrations avec details</span>
|
|
1079
|
+
<span data-lang="en">Show all migrations with details</span>
|
|
1080
|
+
</td>
|
|
1081
|
+
</tr>
|
|
1082
|
+
<tr>
|
|
1083
|
+
<td><code>--json</code></td>
|
|
1084
|
+
<td>
|
|
1085
|
+
<span data-lang="fr">Sortie JSON pour scripting</span>
|
|
1086
|
+
<span data-lang="en">JSON output for scripting</span>
|
|
1087
|
+
</td>
|
|
1088
|
+
</tr>
|
|
1089
|
+
<tr>
|
|
1090
|
+
<td><code>--context {name}</code></td>
|
|
1091
|
+
<td>
|
|
1092
|
+
<span data-lang="fr">Specifier le DbContext</span>
|
|
1093
|
+
<span data-lang="en">Specify DbContext</span>
|
|
1094
|
+
</td>
|
|
1095
|
+
</tr>
|
|
1096
|
+
</tbody>
|
|
1097
|
+
</table>
|
|
1098
|
+
</div>
|
|
1099
|
+
</div>
|
|
1100
|
+
</div>
|
|
1101
|
+
|
|
1102
|
+
<!-- ==================== /efcore:db-deploy ==================== -->
|
|
1103
|
+
<div class="command-card" id="cmd-db-deploy">
|
|
1104
|
+
<div class="command-header">
|
|
1105
|
+
<code class="command-name">/efcore:db-deploy</code>
|
|
1106
|
+
<span class="tag tag-workflow">MEDIUM</span>
|
|
1107
|
+
</div>
|
|
1108
|
+
<div class="command-body">
|
|
1109
|
+
<p data-lang="fr">
|
|
1110
|
+
Cette commande applique toutes les migrations en attente sur votre base de donnees locale. Elle utilise le fichier appsettings.Local.json pour obtenir la connection string, verifie d'abord qu'il y a des migrations a appliquer, puis execute dotnet ef database update. Le processus affiche les details SQL en mode verbose pour suivre les modifications appliquees. Cette commande est essentielle apres avoir cree une nouvelle migration ou apres avoir recupere des modifications d'autres developpeurs contenant des migrations.
|
|
1111
|
+
</p>
|
|
1112
|
+
<p data-lang="en">
|
|
1113
|
+
This command applies all pending migrations to your local database. It uses appsettings.Local.json file to get the connection string, first verifies there are migrations to apply, then executes dotnet ef database update. The process displays SQL details in verbose mode to track applied modifications. This command is essential after creating a new migration or after pulling changes from other developers containing migrations.
|
|
1114
|
+
</p>
|
|
1115
|
+
|
|
1116
|
+
<div class="table-container">
|
|
1117
|
+
<table>
|
|
1118
|
+
<tbody>
|
|
1119
|
+
<tr>
|
|
1120
|
+
<td><strong>Agent</strong></td>
|
|
1121
|
+
<td><code>efcore-db-deploy</code></td>
|
|
1122
|
+
</tr>
|
|
1123
|
+
<tr>
|
|
1124
|
+
<td><strong>Model</strong></td>
|
|
1125
|
+
<td>haiku (fast)</td>
|
|
1126
|
+
</tr>
|
|
1127
|
+
<tr>
|
|
1128
|
+
<td><strong>Tools</strong></td>
|
|
1129
|
+
<td>Bash, Glob</td>
|
|
1130
|
+
</tr>
|
|
1131
|
+
</tbody>
|
|
1132
|
+
</table>
|
|
1133
|
+
</div>
|
|
1134
|
+
|
|
1135
|
+
<h4 data-lang="fr">Prerequis</h4>
|
|
1136
|
+
<h4 data-lang="en">Prerequisites</h4>
|
|
1137
|
+
|
|
1138
|
+
<div class="feature-grid">
|
|
1139
|
+
<div class="feature-item">
|
|
1140
|
+
<span class="feature-icon">📄</span>
|
|
1141
|
+
<span class="feature-text"><code>appsettings.Local.json</code> configure</span>
|
|
1142
|
+
</div>
|
|
1143
|
+
<div class="feature-item">
|
|
1144
|
+
<span class="feature-icon">🖥</span>
|
|
1145
|
+
<span class="feature-text" data-lang="fr">SQL Server accessible</span>
|
|
1146
|
+
<span class="feature-text" data-lang="en">SQL Server accessible</span>
|
|
1147
|
+
</div>
|
|
1148
|
+
<div class="feature-item">
|
|
1149
|
+
<span class="feature-icon">🔄</span>
|
|
1150
|
+
<span class="feature-text" data-lang="fr">Migrations en attente</span>
|
|
1151
|
+
<span class="feature-text" data-lang="en">Pending migrations</span>
|
|
1152
|
+
</div>
|
|
1153
|
+
</div>
|
|
1154
|
+
|
|
1155
|
+
<div class="code-block">
|
|
1156
|
+
<button class="copy-btn">Copy</button>
|
|
1157
|
+
<pre><code># Deploy migrations
|
|
1158
|
+
/efcore:db-deploy
|
|
1159
|
+
|
|
1160
|
+
# Equivalent to:
|
|
1161
|
+
dotnet ef database update --verbose</code></pre>
|
|
1162
|
+
</div>
|
|
1163
|
+
|
|
1164
|
+
<h4>Options</h4>
|
|
1165
|
+
<div class="table-container">
|
|
1166
|
+
<table>
|
|
1167
|
+
<thead>
|
|
1168
|
+
<tr>
|
|
1169
|
+
<th>Option</th>
|
|
1170
|
+
<th>Description</th>
|
|
1171
|
+
</tr>
|
|
1172
|
+
</thead>
|
|
1173
|
+
<tbody>
|
|
1174
|
+
<tr>
|
|
1175
|
+
<td><code>--verbose</code></td>
|
|
1176
|
+
<td>
|
|
1177
|
+
<span data-lang="fr">Afficher les details SQL</span>
|
|
1178
|
+
<span data-lang="en">Show SQL details</span>
|
|
1179
|
+
</td>
|
|
1180
|
+
</tr>
|
|
1181
|
+
<tr>
|
|
1182
|
+
<td><code>--connection "..."</code></td>
|
|
1183
|
+
<td>
|
|
1184
|
+
<span data-lang="fr">Override connection string</span>
|
|
1185
|
+
<span data-lang="en">Override connection string</span>
|
|
1186
|
+
</td>
|
|
1187
|
+
</tr>
|
|
1188
|
+
<tr>
|
|
1189
|
+
<td><code>--context {name}</code></td>
|
|
1190
|
+
<td>
|
|
1191
|
+
<span data-lang="fr">Specifier le DbContext si multiple</span>
|
|
1192
|
+
<span data-lang="en">Specify DbContext if multiple</span>
|
|
1193
|
+
</td>
|
|
1194
|
+
</tr>
|
|
1195
|
+
</tbody>
|
|
1196
|
+
</table>
|
|
1197
|
+
</div>
|
|
1198
|
+
</div>
|
|
1199
|
+
</div>
|
|
1200
|
+
|
|
1201
|
+
<!-- ==================== /efcore:db-seed ==================== -->
|
|
1202
|
+
<div class="command-card" id="cmd-db-seed">
|
|
1203
|
+
<div class="command-header">
|
|
1204
|
+
<code class="command-name">/efcore:db-seed</code>
|
|
1205
|
+
<span class="tag tag-workflow">MEDIUM</span>
|
|
1206
|
+
</div>
|
|
1207
|
+
<div class="command-body">
|
|
1208
|
+
<p data-lang="fr">
|
|
1209
|
+
Cette commande peuple la base de donnees avec des donnees de test ou initiales pour le developpement local. Elle detecte automatiquement les methodes de seeding disponibles dans le projet : classe Seeder dediee, methode HasData() dans le DbContext, script SQL seed.sql, ou argument CLI --seed. Elle vous propose ensuite de choisir la methode a utiliser. Ideale apres un /efcore:db-reset ou pour initialiser un nouvel environnement de developpement avec des donnees coherentes.
|
|
1210
|
+
</p>
|
|
1211
|
+
<p data-lang="en">
|
|
1212
|
+
This command populates the database with test or initial data for local development. It automatically detects available seeding methods in the project: dedicated Seeder class, HasData() method in DbContext, seed.sql SQL script, or CLI --seed argument. It then offers you to choose which method to use. Ideal after /efcore:db-reset or to initialize a new development environment with consistent data.
|
|
1213
|
+
</p>
|
|
1214
|
+
|
|
1215
|
+
<div class="table-container">
|
|
1216
|
+
<table>
|
|
1217
|
+
<tbody>
|
|
1218
|
+
<tr>
|
|
1219
|
+
<td><strong>Agent</strong></td>
|
|
1220
|
+
<td><code>efcore-db-seed</code></td>
|
|
1221
|
+
</tr>
|
|
1222
|
+
<tr>
|
|
1223
|
+
<td><strong>Model</strong></td>
|
|
1224
|
+
<td>haiku (fast)</td>
|
|
1225
|
+
</tr>
|
|
1226
|
+
<tr>
|
|
1227
|
+
<td><strong>Tools</strong></td>
|
|
1228
|
+
<td>Bash, Glob, Read</td>
|
|
1229
|
+
</tr>
|
|
1230
|
+
</tbody>
|
|
1231
|
+
</table>
|
|
1232
|
+
</div>
|
|
1233
|
+
|
|
1234
|
+
<h4 data-lang="fr">Methodes de seeding detectees</h4>
|
|
1235
|
+
<h4 data-lang="en">Detected Seeding Methods</h4>
|
|
1236
|
+
|
|
1237
|
+
<div class="table-container">
|
|
1238
|
+
<table>
|
|
1239
|
+
<thead>
|
|
1240
|
+
<tr>
|
|
1241
|
+
<th>
|
|
1242
|
+
<span data-lang="fr">Methode</span>
|
|
1243
|
+
<span data-lang="en">Method</span>
|
|
1244
|
+
</th>
|
|
1245
|
+
<th>
|
|
1246
|
+
<span data-lang="fr">Detection</span>
|
|
1247
|
+
<span data-lang="en">Detection</span>
|
|
1248
|
+
</th>
|
|
1249
|
+
<th>
|
|
1250
|
+
<span data-lang="fr">Execution</span>
|
|
1251
|
+
<span data-lang="en">Execution</span>
|
|
1252
|
+
</th>
|
|
1253
|
+
</tr>
|
|
1254
|
+
</thead>
|
|
1255
|
+
<tbody>
|
|
1256
|
+
<tr>
|
|
1257
|
+
<td>Seeder Class</td>
|
|
1258
|
+
<td><code>class.*Seeder</code></td>
|
|
1259
|
+
<td><code>dotnet run -- --seed</code></td>
|
|
1260
|
+
</tr>
|
|
1261
|
+
<tr>
|
|
1262
|
+
<td>HasData()</td>
|
|
1263
|
+
<td><code>.HasData(</code></td>
|
|
1264
|
+
<td>
|
|
1265
|
+
<span data-lang="fr">Via migrations</span>
|
|
1266
|
+
<span data-lang="en">Via migrations</span>
|
|
1267
|
+
</td>
|
|
1268
|
+
</tr>
|
|
1269
|
+
<tr>
|
|
1270
|
+
<td>Script SQL</td>
|
|
1271
|
+
<td><code>./scripts/seed.sql</code></td>
|
|
1272
|
+
<td><code>sqlcmd -i seed.sql</code></td>
|
|
1273
|
+
</tr>
|
|
1274
|
+
<tr>
|
|
1275
|
+
<td>CLI --seed</td>
|
|
1276
|
+
<td><code>--seed</code> in Program.cs</td>
|
|
1277
|
+
<td><code>dotnet run -- --seed</code></td>
|
|
1278
|
+
</tr>
|
|
1279
|
+
</tbody>
|
|
1280
|
+
</table>
|
|
1281
|
+
</div>
|
|
1282
|
+
|
|
1283
|
+
<div class="code-block">
|
|
1284
|
+
<button class="copy-btn">Copy</button>
|
|
1285
|
+
<pre><code># Execute seeding
|
|
1286
|
+
/efcore:db-seed
|
|
1287
|
+
|
|
1288
|
+
# The agent automatically detects available methods
|
|
1289
|
+
# and offers you a choice</code></pre>
|
|
1290
|
+
</div>
|
|
1291
|
+
</div>
|
|
1292
|
+
</div>
|
|
1293
|
+
|
|
1294
|
+
<!-- ==================== /efcore:db-reset ==================== -->
|
|
1295
|
+
<div class="command-card" id="cmd-db-reset">
|
|
1296
|
+
<div class="command-header">
|
|
1297
|
+
<code class="command-name">/efcore:db-reset</code>
|
|
1298
|
+
<span class="tag tag-danger">HIGH - DESTRUCTIVE</span>
|
|
1299
|
+
</div>
|
|
1300
|
+
<div class="command-body">
|
|
1301
|
+
<p data-lang="fr">
|
|
1302
|
+
Cette commande destructive remet la base de donnees a zero en la supprimant completement puis en la recreant avec toutes les migrations. Elle est protegee par plusieurs securites : confirmation obligatoire, proposition de backup avant suppression, blocage si l'environnement est detecte comme Production. Apres la recreation, elle propose optionnellement d'executer le seeding. Utilisez cette commande quand vous avez besoin d'un environnement de developpement completement propre, par exemple apres des modifications majeures du schema ou pour tester le processus complet de migrations.
|
|
1303
|
+
</p>
|
|
1304
|
+
<p data-lang="en">
|
|
1305
|
+
This destructive command resets the database to zero by completely dropping it then recreating it with all migrations. It's protected by several safeguards: mandatory confirmation, backup offer before deletion, blocking if environment is detected as Production. After recreation, it optionally offers to run seeding. Use this command when you need a completely clean development environment, for example after major schema changes or to test the complete migration process.
|
|
1306
|
+
</p>
|
|
1307
|
+
|
|
1308
|
+
<div class="alert alert-warning">
|
|
1309
|
+
<span class="alert-icon">⚠</span>
|
|
1310
|
+
<div class="alert-content">
|
|
1311
|
+
<p data-lang="fr"><strong>ATTENTION:</strong> Cette commande SUPPRIME toutes les donnees!</p>
|
|
1312
|
+
<p data-lang="en"><strong>WARNING:</strong> This command DELETES all data!</p>
|
|
1313
|
+
</div>
|
|
1314
|
+
</div>
|
|
1315
|
+
|
|
1316
|
+
<div class="table-container">
|
|
1317
|
+
<table>
|
|
1318
|
+
<tbody>
|
|
1319
|
+
<tr>
|
|
1320
|
+
<td><strong>Agent</strong></td>
|
|
1321
|
+
<td><code>efcore-db-reset</code></td>
|
|
1322
|
+
</tr>
|
|
1323
|
+
<tr>
|
|
1324
|
+
<td><strong>Model</strong></td>
|
|
1325
|
+
<td>sonnet (securite)</td>
|
|
1326
|
+
</tr>
|
|
1327
|
+
<tr>
|
|
1328
|
+
<td><strong>Tools</strong></td>
|
|
1329
|
+
<td>Bash, Glob, Read</td>
|
|
1330
|
+
</tr>
|
|
1331
|
+
</tbody>
|
|
1332
|
+
</table>
|
|
1333
|
+
</div>
|
|
1334
|
+
|
|
1335
|
+
<h4 data-lang="fr">Protections de securite</h4>
|
|
1336
|
+
<h4 data-lang="en">Safety Protections</h4>
|
|
1337
|
+
|
|
1338
|
+
<div class="feature-grid">
|
|
1339
|
+
<div class="feature-item">
|
|
1340
|
+
<span class="feature-icon">🔒</span>
|
|
1341
|
+
<span class="feature-text" data-lang="fr"><strong>Confirmation obligatoire</strong> - Dialogue bloquant</span>
|
|
1342
|
+
<span class="feature-text" data-lang="en"><strong>Mandatory confirmation</strong> - Blocking dialog</span>
|
|
1343
|
+
</div>
|
|
1344
|
+
<div class="feature-item">
|
|
1345
|
+
<span class="feature-icon">💾</span>
|
|
1346
|
+
<span class="feature-text" data-lang="fr"><strong>Backup propose</strong> - Avant suppression</span>
|
|
1347
|
+
<span class="feature-text" data-lang="en"><strong>Backup offered</strong> - Before deletion</span>
|
|
1348
|
+
</div>
|
|
1349
|
+
<div class="feature-item">
|
|
1350
|
+
<span class="feature-icon">🚫</span>
|
|
1351
|
+
<span class="feature-text" data-lang="fr"><strong>Check environnement</strong> - Bloque si Production</span>
|
|
1352
|
+
<span class="feature-text" data-lang="en"><strong>Environment check</strong> - Blocks if Production</span>
|
|
1353
|
+
</div>
|
|
1354
|
+
<div class="feature-item">
|
|
1355
|
+
<span class="feature-icon">🌱</span>
|
|
1356
|
+
<span class="feature-text" data-lang="fr"><strong>Seed optionnel</strong> - Apres recreation</span>
|
|
1357
|
+
<span class="feature-text" data-lang="en"><strong>Optional seed</strong> - After recreation</span>
|
|
1358
|
+
</div>
|
|
1359
|
+
</div>
|
|
1360
|
+
|
|
1361
|
+
<div class="code-block">
|
|
1362
|
+
<button class="copy-btn">Copy</button>
|
|
1363
|
+
<pre><code># Complete database reset
|
|
1364
|
+
/efcore:db-reset
|
|
1365
|
+
|
|
1366
|
+
# Workflow:
|
|
1367
|
+
# 1. Mandatory confirmation
|
|
1368
|
+
# 2. Optional backup (recommended)
|
|
1369
|
+
# 3. DROP DATABASE
|
|
1370
|
+
# 4. CREATE DATABASE (via migrations)
|
|
1371
|
+
# 5. Optional seed</code></pre>
|
|
1372
|
+
</div>
|
|
1373
|
+
</div>
|
|
1374
|
+
</div>
|
|
1375
|
+
|
|
1376
|
+
<!-- ==================== /efcore:scan ==================== -->
|
|
1377
|
+
<div class="command-card" id="cmd-scan">
|
|
1378
|
+
<div class="command-header">
|
|
1379
|
+
<code class="command-name">/efcore:scan</code>
|
|
1380
|
+
<span class="tag tag-command">READ</span>
|
|
1381
|
+
</div>
|
|
1382
|
+
<div class="command-body">
|
|
1383
|
+
<p data-lang="fr">
|
|
1384
|
+
Cette commande read-only scanne tous les worktrees actifs (main, develop, et toutes les branches feature/hotfix) pour cartographier les migrations EF Core presentes. Elle compare chaque ModelSnapshot avec celui de develop pour calculer un niveau de risque : NONE (identique), LOW (tables differentes), MEDIUM (FK vers memes tables), HIGH (meme table modifiee), ou CRITICAL (meme colonne). Le resultat inclut un ordre de merge recommande basant sur ces risques. Executez cette commande avant de commencer une integration pour avoir une vue globale de l'etat des migrations dans l'equipe.
|
|
1385
|
+
</p>
|
|
1386
|
+
<p data-lang="en">
|
|
1387
|
+
This read-only command scans all active worktrees (main, develop, and all feature/hotfix branches) to map present EF Core migrations. It compares each ModelSnapshot with develop's to calculate a risk level: NONE (identical), LOW (different tables), MEDIUM (FK to same tables), HIGH (same table modified), or CRITICAL (same column). The result includes a recommended merge order based on these risks. Run this command before starting an integration to get a global view of migration state across the team.
|
|
1388
|
+
</p>
|
|
1389
|
+
|
|
1390
|
+
<div class="table-container">
|
|
1391
|
+
<table>
|
|
1392
|
+
<tbody>
|
|
1393
|
+
<tr>
|
|
1394
|
+
<td><strong>Agent</strong></td>
|
|
1395
|
+
<td><code>efcore-scan</code></td>
|
|
1396
|
+
</tr>
|
|
1397
|
+
<tr>
|
|
1398
|
+
<td><strong>Model</strong></td>
|
|
1399
|
+
<td>sonnet</td>
|
|
1400
|
+
</tr>
|
|
1401
|
+
<tr>
|
|
1402
|
+
<td><strong>Tools</strong></td>
|
|
1403
|
+
<td>Bash, Glob, Read</td>
|
|
1404
|
+
</tr>
|
|
1405
|
+
</tbody>
|
|
1406
|
+
</table>
|
|
1407
|
+
</div>
|
|
1408
|
+
|
|
1409
|
+
<h4 data-lang="fr">Niveaux de risque</h4>
|
|
1410
|
+
<h4 data-lang="en">Risk Levels</h4>
|
|
1411
|
+
|
|
1412
|
+
<div class="table-container">
|
|
1413
|
+
<table>
|
|
1414
|
+
<thead>
|
|
1415
|
+
<tr>
|
|
1416
|
+
<th>
|
|
1417
|
+
<span data-lang="fr">Niveau</span>
|
|
1418
|
+
<span data-lang="en">Level</span>
|
|
1419
|
+
</th>
|
|
1420
|
+
<th>
|
|
1421
|
+
<span data-lang="fr">Signification</span>
|
|
1422
|
+
<span data-lang="en">Meaning</span>
|
|
1423
|
+
</th>
|
|
1424
|
+
<th>Action</th>
|
|
1425
|
+
</tr>
|
|
1426
|
+
</thead>
|
|
1427
|
+
<tbody>
|
|
1428
|
+
<tr>
|
|
1429
|
+
<td><span class="tag tag-command">NONE</span></td>
|
|
1430
|
+
<td>
|
|
1431
|
+
<span data-lang="fr">Snapshot = develop</span>
|
|
1432
|
+
<span data-lang="en">Snapshot = develop</span>
|
|
1433
|
+
</td>
|
|
1434
|
+
<td>Merge direct</td>
|
|
1435
|
+
</tr>
|
|
1436
|
+
<tr>
|
|
1437
|
+
<td><span class="tag tag-workflow">LOW</span></td>
|
|
1438
|
+
<td>
|
|
1439
|
+
<span data-lang="fr">Tables differentes</span>
|
|
1440
|
+
<span data-lang="en">Different tables</span>
|
|
1441
|
+
</td>
|
|
1442
|
+
<td>Merge OK</td>
|
|
1443
|
+
</tr>
|
|
1444
|
+
<tr>
|
|
1445
|
+
<td><span class="tag tag-warning">MEDIUM</span></td>
|
|
1446
|
+
<td>
|
|
1447
|
+
<span data-lang="fr">FK vers memes tables</span>
|
|
1448
|
+
<span data-lang="en">FK to same tables</span>
|
|
1449
|
+
</td>
|
|
1450
|
+
<td>
|
|
1451
|
+
<span data-lang="fr">Attention a l'ordre</span>
|
|
1452
|
+
<span data-lang="en">Order matters</span>
|
|
1453
|
+
</td>
|
|
1454
|
+
</tr>
|
|
1455
|
+
<tr>
|
|
1456
|
+
<td><span class="tag tag-danger">HIGH</span></td>
|
|
1457
|
+
<td>
|
|
1458
|
+
<span data-lang="fr">Meme table modifiee</span>
|
|
1459
|
+
<span data-lang="en">Same table modified</span>
|
|
1460
|
+
</td>
|
|
1461
|
+
<td>
|
|
1462
|
+
<span data-lang="fr">Rebase requis</span>
|
|
1463
|
+
<span data-lang="en">Rebase required</span>
|
|
1464
|
+
</td>
|
|
1465
|
+
</tr>
|
|
1466
|
+
<tr>
|
|
1467
|
+
<td><span class="tag tag-danger">CRITICAL</span></td>
|
|
1468
|
+
<td>
|
|
1469
|
+
<span data-lang="fr">Meme colonne modifiee</span>
|
|
1470
|
+
<span data-lang="en">Same column modified</span>
|
|
1471
|
+
</td>
|
|
1472
|
+
<td>
|
|
1473
|
+
<span data-lang="fr">Intervention manuelle</span>
|
|
1474
|
+
<span data-lang="en">Manual intervention</span>
|
|
1475
|
+
</td>
|
|
1476
|
+
</tr>
|
|
1477
|
+
</tbody>
|
|
1478
|
+
</table>
|
|
1479
|
+
</div>
|
|
1480
|
+
|
|
1481
|
+
<div class="code-block">
|
|
1482
|
+
<pre><code>================================================================================
|
|
1483
|
+
EF CORE CROSS-BRANCH SCAN
|
|
1484
|
+
================================================================================
|
|
1485
|
+
|
|
1486
|
+
WORKTREES DETECTES (5)
|
|
1487
|
+
main/ [main]
|
|
1488
|
+
develop/ [develop]
|
|
1489
|
+
features/user-auth/ [feature/user-auth]
|
|
1490
|
+
features/add-products/ [feature/add-products]
|
|
1491
|
+
hotfixes/login-fix/ [hotfix/login-fix]
|
|
1492
|
+
|
|
1493
|
+
MIGRATIONS PAR BRANCHE
|
|
1494
|
+
develop | 12 migrations | Snapshot: a1b2c3d4 (REFERENCE)
|
|
1495
|
+
feature/user-auth | 13 migrations | Snapshot: e5f6g7h8
|
|
1496
|
+
feature/add-products | 13 migrations | Snapshot: i9j0k1l2
|
|
1497
|
+
hotfix/login-fix | 12 migrations | Snapshot: a1b2c3d4
|
|
1498
|
+
|
|
1499
|
+
ANALYSE DES RISQUES
|
|
1500
|
+
feature/user-auth : LOW (tables differentes)
|
|
1501
|
+
feature/add-products : MEDIUM (FK vers meme table)
|
|
1502
|
+
hotfix/login-fix : NONE (snapshot = develop)
|
|
1503
|
+
|
|
1504
|
+
ORDRE DE MERGE RECOMMANDE
|
|
1505
|
+
1. hotfix/login-fix (NONE - merge direct)
|
|
1506
|
+
2. feature/user-auth (LOW - merge OK)
|
|
1507
|
+
3. feature/add-products (MEDIUM - apres user-auth)
|
|
1508
|
+
|
|
1509
|
+
================================================================================</code></pre>
|
|
1510
|
+
</div>
|
|
1511
|
+
|
|
1512
|
+
<h4>Options</h4>
|
|
1513
|
+
<div class="table-container">
|
|
1514
|
+
<table>
|
|
1515
|
+
<thead>
|
|
1516
|
+
<tr>
|
|
1517
|
+
<th>Option</th>
|
|
1518
|
+
<th>Description</th>
|
|
1519
|
+
</tr>
|
|
1520
|
+
</thead>
|
|
1521
|
+
<tbody>
|
|
1522
|
+
<tr>
|
|
1523
|
+
<td><code>--json</code></td>
|
|
1524
|
+
<td>
|
|
1525
|
+
<span data-lang="fr">Output en format JSON pour CI/CD</span>
|
|
1526
|
+
<span data-lang="en">JSON output for CI/CD</span>
|
|
1527
|
+
</td>
|
|
1528
|
+
</tr>
|
|
1529
|
+
<tr>
|
|
1530
|
+
<td><code>--branch {name}</code></td>
|
|
1531
|
+
<td>
|
|
1532
|
+
<span data-lang="fr">Scanner une branche specifique</span>
|
|
1533
|
+
<span data-lang="en">Scan a specific branch</span>
|
|
1534
|
+
</td>
|
|
1535
|
+
</tr>
|
|
1536
|
+
<tr>
|
|
1537
|
+
<td><code>--verbose</code></td>
|
|
1538
|
+
<td>
|
|
1539
|
+
<span data-lang="fr">Afficher les details des differences</span>
|
|
1540
|
+
<span data-lang="en">Show difference details</span>
|
|
1541
|
+
</td>
|
|
1542
|
+
</tr>
|
|
1543
|
+
<tr>
|
|
1544
|
+
<td><code>--no-recommend</code></td>
|
|
1545
|
+
<td>
|
|
1546
|
+
<span data-lang="fr">Ne pas afficher les recommandations</span>
|
|
1547
|
+
<span data-lang="en">Don't show recommendations</span>
|
|
1548
|
+
</td>
|
|
1549
|
+
</tr>
|
|
1550
|
+
</tbody>
|
|
1551
|
+
</table>
|
|
1552
|
+
</div>
|
|
1553
|
+
</div>
|
|
1554
|
+
</div>
|
|
1555
|
+
|
|
1556
|
+
<!-- ==================== /efcore:conflicts ==================== -->
|
|
1557
|
+
<div class="command-card" id="cmd-conflicts">
|
|
1558
|
+
<div class="command-header">
|
|
1559
|
+
<code class="command-name">/efcore:conflicts</code>
|
|
1560
|
+
<span class="tag tag-command">READ - BLOCKING</span>
|
|
1561
|
+
</div>
|
|
1562
|
+
<div class="command-body">
|
|
1563
|
+
<p data-lang="fr">
|
|
1564
|
+
Cette commande analyse si la branche courante peut etre mergee dans develop sans conflit de migration EF Core. Elle compare le ModelSnapshot local avec celui de develop et des autres branches actives pour detecter les modifications qui se chevauchent : tables communes modifiees, colonnes identiques ajoutees, ou FK vers les memes entites. Si un conflit HIGH ou CRITICAL est detecte, la commande est BLOQUANTE et retourne un code d'erreur, empechant le merge. Elle recommande alors d'utiliser /efcore:rebase-snapshot pour resoudre le conflit avant de continuer.
|
|
1565
|
+
</p>
|
|
1566
|
+
<p data-lang="en">
|
|
1567
|
+
This command analyzes if the current branch can be merged into develop without EF Core migration conflict. It compares local ModelSnapshot with develop's and other active branches to detect overlapping modifications: common tables modified, identical columns added, or FK to same entities. If a HIGH or CRITICAL conflict is detected, the command is BLOCKING and returns an error code, preventing merge. It then recommends using /efcore:rebase-snapshot to resolve the conflict before continuing.
|
|
1568
|
+
</p>
|
|
1569
|
+
|
|
1570
|
+
<div class="table-container">
|
|
1571
|
+
<table>
|
|
1572
|
+
<tbody>
|
|
1573
|
+
<tr>
|
|
1574
|
+
<td><strong>Agent</strong></td>
|
|
1575
|
+
<td><code>efcore-conflicts</code></td>
|
|
1576
|
+
</tr>
|
|
1577
|
+
<tr>
|
|
1578
|
+
<td><strong>Model</strong></td>
|
|
1579
|
+
<td>sonnet</td>
|
|
1580
|
+
</tr>
|
|
1581
|
+
<tr>
|
|
1582
|
+
<td><strong>Tools</strong></td>
|
|
1583
|
+
<td>Bash, Glob, Read</td>
|
|
1584
|
+
</tr>
|
|
1585
|
+
</tbody>
|
|
1586
|
+
</table>
|
|
1587
|
+
</div>
|
|
1588
|
+
|
|
1589
|
+
<h4 data-lang="fr">Exit Codes</h4>
|
|
1590
|
+
<h4 data-lang="en">Exit Codes</h4>
|
|
1591
|
+
|
|
1592
|
+
<div class="table-container">
|
|
1593
|
+
<table>
|
|
1594
|
+
<thead>
|
|
1595
|
+
<tr>
|
|
1596
|
+
<th>Code</th>
|
|
1597
|
+
<th>
|
|
1598
|
+
<span data-lang="fr">Signification</span>
|
|
1599
|
+
<span data-lang="en">Meaning</span>
|
|
1600
|
+
</th>
|
|
1601
|
+
</tr>
|
|
1602
|
+
</thead>
|
|
1603
|
+
<tbody>
|
|
1604
|
+
<tr>
|
|
1605
|
+
<td><code>0</code></td>
|
|
1606
|
+
<td>
|
|
1607
|
+
<span data-lang="fr">Aucun conflit ou conflit mineur</span>
|
|
1608
|
+
<span data-lang="en">No conflict or minor conflict</span>
|
|
1609
|
+
</td>
|
|
1610
|
+
</tr>
|
|
1611
|
+
<tr>
|
|
1612
|
+
<td><code>1</code></td>
|
|
1613
|
+
<td>
|
|
1614
|
+
<span data-lang="fr">Conflit detecte - merge bloque</span>
|
|
1615
|
+
<span data-lang="en">Conflict detected - merge blocked</span>
|
|
1616
|
+
</td>
|
|
1617
|
+
</tr>
|
|
1618
|
+
<tr>
|
|
1619
|
+
<td><code>2</code></td>
|
|
1620
|
+
<td>
|
|
1621
|
+
<span data-lang="fr">Erreur technique</span>
|
|
1622
|
+
<span data-lang="en">Technical error</span>
|
|
1623
|
+
</td>
|
|
1624
|
+
</tr>
|
|
1625
|
+
</tbody>
|
|
1626
|
+
</table>
|
|
1627
|
+
</div>
|
|
1628
|
+
|
|
1629
|
+
<div class="code-block">
|
|
1630
|
+
<button class="copy-btn">Copy</button>
|
|
1631
|
+
<pre><code># Check conflicts before merge
|
|
1632
|
+
/efcore:conflicts
|
|
1633
|
+
|
|
1634
|
+
# If conflict detected:
|
|
1635
|
+
# → /efcore:rebase-snapshot (recommended)
|
|
1636
|
+
# → /efcore:conflicts --force (not recommended)</code></pre>
|
|
1637
|
+
</div>
|
|
1638
|
+
|
|
1639
|
+
<h4>Options</h4>
|
|
1640
|
+
<div class="table-container">
|
|
1641
|
+
<table>
|
|
1642
|
+
<thead>
|
|
1643
|
+
<tr>
|
|
1644
|
+
<th>Option</th>
|
|
1645
|
+
<th>Description</th>
|
|
1646
|
+
</tr>
|
|
1647
|
+
</thead>
|
|
1648
|
+
<tbody>
|
|
1649
|
+
<tr>
|
|
1650
|
+
<td><code>--force</code></td>
|
|
1651
|
+
<td>
|
|
1652
|
+
<span data-lang="fr">Ignorer le conflit (non recommande)</span>
|
|
1653
|
+
<span data-lang="en">Ignore conflict (not recommended)</span>
|
|
1654
|
+
</td>
|
|
1655
|
+
</tr>
|
|
1656
|
+
<tr>
|
|
1657
|
+
<td><code>--verbose</code></td>
|
|
1658
|
+
<td>
|
|
1659
|
+
<span data-lang="fr">Afficher les differences detaillees</span>
|
|
1660
|
+
<span data-lang="en">Show detailed differences</span>
|
|
1661
|
+
</td>
|
|
1662
|
+
</tr>
|
|
1663
|
+
<tr>
|
|
1664
|
+
<td><code>--json</code></td>
|
|
1665
|
+
<td>
|
|
1666
|
+
<span data-lang="fr">Output JSON pour CI/CD</span>
|
|
1667
|
+
<span data-lang="en">JSON output for CI/CD</span>
|
|
1668
|
+
</td>
|
|
1669
|
+
</tr>
|
|
1670
|
+
<tr>
|
|
1671
|
+
<td><code>--target {branch}</code></td>
|
|
1672
|
+
<td>
|
|
1673
|
+
<span data-lang="fr">Comparer avec une autre branche que develop</span>
|
|
1674
|
+
<span data-lang="en">Compare with branch other than develop</span>
|
|
1675
|
+
</td>
|
|
1676
|
+
</tr>
|
|
1677
|
+
</tbody>
|
|
1678
|
+
</table>
|
|
1679
|
+
</div>
|
|
1680
|
+
</div>
|
|
1681
|
+
</div>
|
|
1682
|
+
|
|
1683
|
+
<!-- ==================== /efcore:rebase-snapshot ==================== -->
|
|
1684
|
+
<div class="command-card" id="cmd-rebase-snapshot">
|
|
1685
|
+
<div class="command-header">
|
|
1686
|
+
<code class="command-name">/efcore:rebase-snapshot</code>
|
|
1687
|
+
<span class="tag tag-warning">MEDIUM</span>
|
|
1688
|
+
</div>
|
|
1689
|
+
<div class="command-body">
|
|
1690
|
+
<p data-lang="fr">
|
|
1691
|
+
Cette commande resout les conflits ModelSnapshot detectes par /efcore:conflicts en resynchronisant votre branche avec develop. Elle commence par creer un backup automatique de vos migrations, identifie les migrations specifiques a votre branche, remplace le ModelSnapshot par la version de develop, supprime vos migrations de branche, puis regenere une nouvelle migration consolidee qui inclut tous vos changements mais base sur le snapshot actuel de develop. En cas d'echec du build, elle peut restaurer automatiquement depuis le backup. C'est la solution recommandee quand un conflit HIGH est detecte.
|
|
1692
|
+
</p>
|
|
1693
|
+
<p data-lang="en">
|
|
1694
|
+
This command resolves ModelSnapshot conflicts detected by /efcore:conflicts by resynchronizing your branch with develop. It starts by creating an automatic backup of your migrations, identifies branch-specific migrations, replaces ModelSnapshot with develop's version, deletes your branch migrations, then regenerates a new consolidated migration that includes all your changes but based on develop's current snapshot. On build failure, it can automatically restore from backup. This is the recommended solution when a HIGH conflict is detected.
|
|
1695
|
+
</p>
|
|
1696
|
+
|
|
1697
|
+
<div class="table-container">
|
|
1698
|
+
<table>
|
|
1699
|
+
<tbody>
|
|
1700
|
+
<tr>
|
|
1701
|
+
<td><strong>Agent</strong></td>
|
|
1702
|
+
<td><code>efcore-rebase-snapshot</code></td>
|
|
1703
|
+
</tr>
|
|
1704
|
+
<tr>
|
|
1705
|
+
<td><strong>Model</strong></td>
|
|
1706
|
+
<td>sonnet</td>
|
|
1707
|
+
</tr>
|
|
1708
|
+
<tr>
|
|
1709
|
+
<td><strong>Tools</strong></td>
|
|
1710
|
+
<td>Bash, Glob, Read, Edit</td>
|
|
1711
|
+
</tr>
|
|
1712
|
+
</tbody>
|
|
1713
|
+
</table>
|
|
1714
|
+
</div>
|
|
1715
|
+
|
|
1716
|
+
<h4 data-lang="fr">Workflow en 8 etapes</h4>
|
|
1717
|
+
<h4 data-lang="en">8-Step Workflow</h4>
|
|
1718
|
+
|
|
1719
|
+
<div class="workflow-stepper-vertical" data-lang="fr">
|
|
1720
|
+
<div class="step-item">
|
|
1721
|
+
<div class="step-number step-validate">1</div>
|
|
1722
|
+
<div class="step-content">
|
|
1723
|
+
<div class="step-title">Prerequis</div>
|
|
1724
|
+
<div class="step-desc">Branche GitFlow, directory propre</div>
|
|
1725
|
+
</div>
|
|
1726
|
+
</div>
|
|
1727
|
+
<div class="step-item">
|
|
1728
|
+
<div class="step-number step-detect">2</div>
|
|
1729
|
+
<div class="step-content">
|
|
1730
|
+
<div class="step-title">Backup</div>
|
|
1731
|
+
<div class="step-desc">Sauvegarde automatique</div>
|
|
1732
|
+
</div>
|
|
1733
|
+
</div>
|
|
1734
|
+
<div class="step-item">
|
|
1735
|
+
<div class="step-number step-search">3</div>
|
|
1736
|
+
<div class="step-content">
|
|
1737
|
+
<div class="step-title">Identification</div>
|
|
1738
|
+
<div class="step-desc">Migrations branche vs develop</div>
|
|
1739
|
+
</div>
|
|
1740
|
+
</div>
|
|
1741
|
+
<div class="step-item">
|
|
1742
|
+
<div class="step-number step-decision">4</div>
|
|
1743
|
+
<div class="step-content">
|
|
1744
|
+
<div class="step-title">Reset Snapshot</div>
|
|
1745
|
+
<div class="step-desc">Checkout depuis develop</div>
|
|
1746
|
+
</div>
|
|
1747
|
+
</div>
|
|
1748
|
+
<div class="step-item">
|
|
1749
|
+
<div class="step-number step-input">5</div>
|
|
1750
|
+
<div class="step-content">
|
|
1751
|
+
<div class="step-title">Suppression</div>
|
|
1752
|
+
<div class="step-desc">Anciennes migrations</div>
|
|
1753
|
+
</div>
|
|
1754
|
+
</div>
|
|
1755
|
+
<div class="step-item">
|
|
1756
|
+
<div class="step-number step-create">6</div>
|
|
1757
|
+
<div class="step-content">
|
|
1758
|
+
<div class="step-title">Regeneration</div>
|
|
1759
|
+
<div class="step-desc">Migration consolidee</div>
|
|
1760
|
+
</div>
|
|
1761
|
+
</div>
|
|
1762
|
+
<div class="step-item">
|
|
1763
|
+
<div class="step-number step-confirm">7</div>
|
|
1764
|
+
<div class="step-content">
|
|
1765
|
+
<div class="step-title">Validation</div>
|
|
1766
|
+
<div class="step-desc">Build + script SQL</div>
|
|
1767
|
+
</div>
|
|
1768
|
+
</div>
|
|
1769
|
+
<div class="step-item">
|
|
1770
|
+
<div class="step-number step-generate">8</div>
|
|
1771
|
+
<div class="step-content">
|
|
1772
|
+
<div class="step-title">Resume</div>
|
|
1773
|
+
<div class="step-desc">Prochaines etapes</div>
|
|
1774
|
+
</div>
|
|
1775
|
+
</div>
|
|
1776
|
+
</div>
|
|
1777
|
+
|
|
1778
|
+
<div class="workflow-stepper-vertical" data-lang="en">
|
|
1779
|
+
<div class="step-item">
|
|
1780
|
+
<div class="step-number step-validate">1</div>
|
|
1781
|
+
<div class="step-content">
|
|
1782
|
+
<div class="step-title">Prerequisites</div>
|
|
1783
|
+
<div class="step-desc">GitFlow branch, clean directory</div>
|
|
1784
|
+
</div>
|
|
1785
|
+
</div>
|
|
1786
|
+
<div class="step-item">
|
|
1787
|
+
<div class="step-number step-detect">2</div>
|
|
1788
|
+
<div class="step-content">
|
|
1789
|
+
<div class="step-title">Backup</div>
|
|
1790
|
+
<div class="step-desc">Automatic backup</div>
|
|
1791
|
+
</div>
|
|
1792
|
+
</div>
|
|
1793
|
+
<div class="step-item">
|
|
1794
|
+
<div class="step-number step-search">3</div>
|
|
1795
|
+
<div class="step-content">
|
|
1796
|
+
<div class="step-title">Identification</div>
|
|
1797
|
+
<div class="step-desc">Branch migrations vs develop</div>
|
|
1798
|
+
</div>
|
|
1799
|
+
</div>
|
|
1800
|
+
<div class="step-item">
|
|
1801
|
+
<div class="step-number step-decision">4</div>
|
|
1802
|
+
<div class="step-content">
|
|
1803
|
+
<div class="step-title">Reset Snapshot</div>
|
|
1804
|
+
<div class="step-desc">Checkout from develop</div>
|
|
1805
|
+
</div>
|
|
1806
|
+
</div>
|
|
1807
|
+
<div class="step-item">
|
|
1808
|
+
<div class="step-number step-input">5</div>
|
|
1809
|
+
<div class="step-content">
|
|
1810
|
+
<div class="step-title">Deletion</div>
|
|
1811
|
+
<div class="step-desc">Old migrations</div>
|
|
1812
|
+
</div>
|
|
1813
|
+
</div>
|
|
1814
|
+
<div class="step-item">
|
|
1815
|
+
<div class="step-number step-create">6</div>
|
|
1816
|
+
<div class="step-content">
|
|
1817
|
+
<div class="step-title">Regeneration</div>
|
|
1818
|
+
<div class="step-desc">Consolidated migration</div>
|
|
1819
|
+
</div>
|
|
1820
|
+
</div>
|
|
1821
|
+
<div class="step-item">
|
|
1822
|
+
<div class="step-number step-confirm">7</div>
|
|
1823
|
+
<div class="step-content">
|
|
1824
|
+
<div class="step-title">Validation</div>
|
|
1825
|
+
<div class="step-desc">Build + SQL script</div>
|
|
1826
|
+
</div>
|
|
1827
|
+
</div>
|
|
1828
|
+
<div class="step-item">
|
|
1829
|
+
<div class="step-number step-generate">8</div>
|
|
1830
|
+
<div class="step-content">
|
|
1831
|
+
<div class="step-title">Summary</div>
|
|
1832
|
+
<div class="step-desc">Next steps</div>
|
|
1833
|
+
</div>
|
|
1834
|
+
</div>
|
|
1835
|
+
</div>
|
|
1836
|
+
|
|
1837
|
+
<h4 data-lang="fr">Quand utiliser</h4>
|
|
1838
|
+
<h4 data-lang="en">When to use</h4>
|
|
1839
|
+
|
|
1840
|
+
<div class="table-container">
|
|
1841
|
+
<table>
|
|
1842
|
+
<thead>
|
|
1843
|
+
<tr>
|
|
1844
|
+
<th>Situation</th>
|
|
1845
|
+
<th>Action</th>
|
|
1846
|
+
</tr>
|
|
1847
|
+
</thead>
|
|
1848
|
+
<tbody>
|
|
1849
|
+
<tr>
|
|
1850
|
+
<td><code>/efcore:conflicts</code> retourne HIGH</td>
|
|
1851
|
+
<td>
|
|
1852
|
+
<span data-lang="fr">Utiliser rebase-snapshot</span>
|
|
1853
|
+
<span data-lang="en">Use rebase-snapshot</span>
|
|
1854
|
+
</td>
|
|
1855
|
+
</tr>
|
|
1856
|
+
<tr>
|
|
1857
|
+
<td>
|
|
1858
|
+
<span data-lang="fr">Merge conflit sur ModelSnapshot</span>
|
|
1859
|
+
<span data-lang="en">Merge conflict on ModelSnapshot</span>
|
|
1860
|
+
</td>
|
|
1861
|
+
<td>
|
|
1862
|
+
<span data-lang="fr">Utiliser rebase-snapshot</span>
|
|
1863
|
+
<span data-lang="en">Use rebase-snapshot</span>
|
|
1864
|
+
</td>
|
|
1865
|
+
</tr>
|
|
1866
|
+
<tr>
|
|
1867
|
+
<td>
|
|
1868
|
+
<span data-lang="fr">Plusieurs migrations a consolider</span>
|
|
1869
|
+
<span data-lang="en">Multiple migrations to consolidate</span>
|
|
1870
|
+
</td>
|
|
1871
|
+
<td>
|
|
1872
|
+
<span data-lang="fr">Utiliser rebase-snapshot</span>
|
|
1873
|
+
<span data-lang="en">Use rebase-snapshot</span>
|
|
1874
|
+
</td>
|
|
1875
|
+
</tr>
|
|
1876
|
+
<tr>
|
|
1877
|
+
<td>
|
|
1878
|
+
<span data-lang="fr">Migration cassee</span>
|
|
1879
|
+
<span data-lang="en">Broken migration</span>
|
|
1880
|
+
</td>
|
|
1881
|
+
<td>
|
|
1882
|
+
<span data-lang="fr">Utiliser rebase-snapshot</span>
|
|
1883
|
+
<span data-lang="en">Use rebase-snapshot</span>
|
|
1884
|
+
</td>
|
|
1885
|
+
</tr>
|
|
1886
|
+
</tbody>
|
|
1887
|
+
</table>
|
|
1888
|
+
</div>
|
|
1889
|
+
|
|
1890
|
+
<h4>Options</h4>
|
|
1891
|
+
<div class="table-container">
|
|
1892
|
+
<table>
|
|
1893
|
+
<thead>
|
|
1894
|
+
<tr>
|
|
1895
|
+
<th>Option</th>
|
|
1896
|
+
<th>Description</th>
|
|
1897
|
+
</tr>
|
|
1898
|
+
</thead>
|
|
1899
|
+
<tbody>
|
|
1900
|
+
<tr>
|
|
1901
|
+
<td><code>--no-backup</code></td>
|
|
1902
|
+
<td>
|
|
1903
|
+
<span data-lang="fr">Ne pas creer de backup (dangereux)</span>
|
|
1904
|
+
<span data-lang="en">Don't create backup (dangerous)</span>
|
|
1905
|
+
</td>
|
|
1906
|
+
</tr>
|
|
1907
|
+
<tr>
|
|
1908
|
+
<td><code>--name {name}</code></td>
|
|
1909
|
+
<td>
|
|
1910
|
+
<span data-lang="fr">Forcer un nom de migration</span>
|
|
1911
|
+
<span data-lang="en">Force migration name</span>
|
|
1912
|
+
</td>
|
|
1913
|
+
</tr>
|
|
1914
|
+
<tr>
|
|
1915
|
+
<td><code>--dry-run</code></td>
|
|
1916
|
+
<td>
|
|
1917
|
+
<span data-lang="fr">Afficher ce qui serait fait</span>
|
|
1918
|
+
<span data-lang="en">Show what would be done</span>
|
|
1919
|
+
</td>
|
|
1920
|
+
</tr>
|
|
1921
|
+
</tbody>
|
|
1922
|
+
</table>
|
|
1923
|
+
</div>
|
|
1924
|
+
</div>
|
|
1925
|
+
</div>
|
|
1926
|
+
|
|
1927
|
+
<!-- ==================== /efcore:squash ==================== -->
|
|
1928
|
+
<div class="command-card" id="cmd-squash">
|
|
1929
|
+
<div class="command-header">
|
|
1930
|
+
<code class="command-name">/efcore:squash</code>
|
|
1931
|
+
<span class="tag tag-danger">HIGH - DESTRUCTIVE</span>
|
|
1932
|
+
</div>
|
|
1933
|
+
<div class="command-body">
|
|
1934
|
+
<p data-lang="fr">
|
|
1935
|
+
Cette commande destructive consolide toutes les migrations existantes en une seule migration propre pour les releases. Elle est utilisee typiquement avant de creer une release pour avoir un historique de migrations clean en production. Le processus cree un backup complet (migrations + script SQL du schema actuel), supprime toutes les migrations, genere une migration unique representant l'etat final du schema, puis genere un script SQL idempotent. Important : si des migrations sont deja appliquees en production, utilisez le script SQL genere plutot que la nouvelle migration pour eviter les conflits d'historique.
|
|
1936
|
+
</p>
|
|
1937
|
+
<p data-lang="en">
|
|
1938
|
+
This destructive command consolidates all existing migrations into a single clean migration for releases. It's typically used before creating a release to have a clean migration history in production. The process creates a full backup (migrations + SQL script of current schema), deletes all migrations, generates a single migration representing the final schema state, then generates an idempotent SQL script. Important: if migrations are already applied in production, use the generated SQL script rather than the new migration to avoid history conflicts.
|
|
1939
|
+
</p>
|
|
1940
|
+
|
|
1941
|
+
<div class="alert alert-warning">
|
|
1942
|
+
<span class="alert-icon">⚠</span>
|
|
1943
|
+
<div class="alert-content">
|
|
1944
|
+
<p data-lang="fr"><strong>ATTENTION:</strong> L'historique des migrations sera perdu!</p>
|
|
1945
|
+
<p data-lang="en"><strong>WARNING:</strong> Migration history will be lost!</p>
|
|
1946
|
+
</div>
|
|
1947
|
+
</div>
|
|
1948
|
+
|
|
1949
|
+
<div class="table-container">
|
|
1950
|
+
<table>
|
|
1951
|
+
<tbody>
|
|
1952
|
+
<tr>
|
|
1953
|
+
<td><strong>Agent</strong></td>
|
|
1954
|
+
<td><code>efcore-squash</code></td>
|
|
1955
|
+
</tr>
|
|
1956
|
+
<tr>
|
|
1957
|
+
<td><strong>Model</strong></td>
|
|
1958
|
+
<td>sonnet</td>
|
|
1959
|
+
</tr>
|
|
1960
|
+
<tr>
|
|
1961
|
+
<td><strong>Tools</strong></td>
|
|
1962
|
+
<td>Bash, Glob, Read</td>
|
|
1963
|
+
</tr>
|
|
1964
|
+
</tbody>
|
|
1965
|
+
</table>
|
|
1966
|
+
</div>
|
|
1967
|
+
|
|
1968
|
+
<h4 data-lang="fr">Quand utiliser Squash</h4>
|
|
1969
|
+
<h4 data-lang="en">When to use Squash</h4>
|
|
1970
|
+
|
|
1971
|
+
<div class="table-container">
|
|
1972
|
+
<table>
|
|
1973
|
+
<thead>
|
|
1974
|
+
<tr>
|
|
1975
|
+
<th>Situation</th>
|
|
1976
|
+
<th>Squash ?</th>
|
|
1977
|
+
</tr>
|
|
1978
|
+
</thead>
|
|
1979
|
+
<tbody>
|
|
1980
|
+
<tr>
|
|
1981
|
+
<td>
|
|
1982
|
+
<span data-lang="fr">Avant release</span>
|
|
1983
|
+
<span data-lang="en">Before release</span>
|
|
1984
|
+
</td>
|
|
1985
|
+
<td>
|
|
1986
|
+
<span data-lang="fr">OUI - nettoyer l'historique</span>
|
|
1987
|
+
<span data-lang="en">YES - clean history</span>
|
|
1988
|
+
</td>
|
|
1989
|
+
</tr>
|
|
1990
|
+
<tr>
|
|
1991
|
+
<td>
|
|
1992
|
+
<span data-lang="fr">Apres merge de plusieurs features</span>
|
|
1993
|
+
<span data-lang="en">After merging multiple features</span>
|
|
1994
|
+
</td>
|
|
1995
|
+
<td>
|
|
1996
|
+
<span data-lang="fr">OUI - consolider</span>
|
|
1997
|
+
<span data-lang="en">YES - consolidate</span>
|
|
1998
|
+
</td>
|
|
1999
|
+
</tr>
|
|
2000
|
+
<tr>
|
|
2001
|
+
<td>
|
|
2002
|
+
<span data-lang="fr">En production</span>
|
|
2003
|
+
<span data-lang="en">In production</span>
|
|
2004
|
+
</td>
|
|
2005
|
+
<td>
|
|
2006
|
+
<span data-lang="fr">NON - utiliser scripts SQL</span>
|
|
2007
|
+
<span data-lang="en">NO - use SQL scripts</span>
|
|
2008
|
+
</td>
|
|
2009
|
+
</tr>
|
|
2010
|
+
<tr>
|
|
2011
|
+
<td>
|
|
2012
|
+
<span data-lang="fr">Branche feature en cours</span>
|
|
2013
|
+
<span data-lang="en">Feature branch in progress</span>
|
|
2014
|
+
</td>
|
|
2015
|
+
<td>
|
|
2016
|
+
<span data-lang="fr">ATTENTION - preferer rebase-snapshot</span>
|
|
2017
|
+
<span data-lang="en">CAUTION - prefer rebase-snapshot</span>
|
|
2018
|
+
</td>
|
|
2019
|
+
</tr>
|
|
2020
|
+
</tbody>
|
|
2021
|
+
</table>
|
|
2022
|
+
</div>
|
|
2023
|
+
|
|
2024
|
+
<h4>Options</h4>
|
|
2025
|
+
<div class="table-container">
|
|
2026
|
+
<table>
|
|
2027
|
+
<thead>
|
|
2028
|
+
<tr>
|
|
2029
|
+
<th>Option</th>
|
|
2030
|
+
<th>Description</th>
|
|
2031
|
+
</tr>
|
|
2032
|
+
</thead>
|
|
2033
|
+
<tbody>
|
|
2034
|
+
<tr>
|
|
2035
|
+
<td><code>--no-backup</code></td>
|
|
2036
|
+
<td>
|
|
2037
|
+
<span data-lang="fr">Ne pas creer de backup (dangereux)</span>
|
|
2038
|
+
<span data-lang="en">Don't create backup (dangerous)</span>
|
|
2039
|
+
</td>
|
|
2040
|
+
</tr>
|
|
2041
|
+
<tr>
|
|
2042
|
+
<td><code>--no-script</code></td>
|
|
2043
|
+
<td>
|
|
2044
|
+
<span data-lang="fr">Ne pas generer de script SQL</span>
|
|
2045
|
+
<span data-lang="en">Don't generate SQL script</span>
|
|
2046
|
+
</td>
|
|
2047
|
+
</tr>
|
|
2048
|
+
<tr>
|
|
2049
|
+
<td><code>--name {name}</code></td>
|
|
2050
|
+
<td>
|
|
2051
|
+
<span data-lang="fr">Forcer un nom de migration</span>
|
|
2052
|
+
<span data-lang="en">Force migration name</span>
|
|
2053
|
+
</td>
|
|
2054
|
+
</tr>
|
|
2055
|
+
<tr>
|
|
2056
|
+
<td><code>--keep-snapshot</code></td>
|
|
2057
|
+
<td>
|
|
2058
|
+
<span data-lang="fr">Garder le ModelSnapshot actuel</span>
|
|
2059
|
+
<span data-lang="en">Keep current ModelSnapshot</span>
|
|
2060
|
+
</td>
|
|
2061
|
+
</tr>
|
|
2062
|
+
<tr>
|
|
2063
|
+
<td><code>--dry-run</code></td>
|
|
2064
|
+
<td>
|
|
2065
|
+
<span data-lang="fr">Afficher sans executer</span>
|
|
2066
|
+
<span data-lang="en">Show without executing</span>
|
|
2067
|
+
</td>
|
|
2068
|
+
</tr>
|
|
2069
|
+
</tbody>
|
|
2070
|
+
</table>
|
|
2071
|
+
</div>
|
|
2072
|
+
</div>
|
|
2073
|
+
</div>
|
|
2074
|
+
|
|
2075
|
+
</section>
|
|
2076
|
+
|
|
2077
|
+
<!-- ============================================================ -->
|
|
2078
|
+
<!-- SECTION: CROSS-BRANCH -->
|
|
2079
|
+
<!-- ============================================================ -->
|
|
2080
|
+
<section id="cross-branch">
|
|
2081
|
+
<h2>Cross-Branch (v1.2)</h2>
|
|
2082
|
+
|
|
2083
|
+
<div class="alert alert-info">
|
|
2084
|
+
<span class="alert-icon">🌟</span>
|
|
2085
|
+
<div class="alert-content">
|
|
2086
|
+
<h5>New in v1.2</h5>
|
|
2087
|
+
<p data-lang="fr">
|
|
2088
|
+
Nouvelles commandes pour gerer les migrations entre plusieurs branches en parallele avec les worktrees GitFlow.
|
|
2089
|
+
</p>
|
|
2090
|
+
<p data-lang="en">
|
|
2091
|
+
New commands to manage migrations across multiple branches in parallel with GitFlow worktrees.
|
|
2092
|
+
</p>
|
|
2093
|
+
</div>
|
|
2094
|
+
</div>
|
|
2095
|
+
|
|
2096
|
+
<p data-lang="fr">
|
|
2097
|
+
Avec les worktrees GitFlow, plusieurs features peuvent etre developpees simultanement. Le systeme cross-branch previent les conflits de ModelSnapshot avant qu'ils ne se produisent.
|
|
2098
|
+
</p>
|
|
2099
|
+
<p data-lang="en">
|
|
2100
|
+
With GitFlow worktrees, multiple features can be developed simultaneously. The cross-branch system prevents ModelSnapshot conflicts before they occur.
|
|
2101
|
+
</p>
|
|
2102
|
+
|
|
2103
|
+
<h3 data-lang="fr">Workflow Cross-Branch</h3>
|
|
2104
|
+
<h3 data-lang="en">Cross-Branch Workflow</h3>
|
|
2105
|
+
|
|
2106
|
+
<div class="code-block">
|
|
2107
|
+
<button class="copy-btn">Copy</button>
|
|
2108
|
+
<pre><code># 1. Scan all active branches
|
|
2109
|
+
/efcore:scan
|
|
2110
|
+
|
|
2111
|
+
# 2. Check conflicts before creating a migration
|
|
2112
|
+
/efcore:conflicts
|
|
2113
|
+
|
|
2114
|
+
# 3. If conflict detected, rebase on develop
|
|
2115
|
+
/efcore:rebase-snapshot
|
|
2116
|
+
|
|
2117
|
+
# 4. Create migration (automatic cross-branch validation)
|
|
2118
|
+
/efcore:migration</code></pre>
|
|
2119
|
+
</div>
|
|
2120
|
+
|
|
2121
|
+
<h3>Configuration</h3>
|
|
2122
|
+
|
|
2123
|
+
<div class="code-block">
|
|
2124
|
+
<button class="copy-btn">Copy</button>
|
|
2125
|
+
<pre><code>{
|
|
2126
|
+
"efcore": {
|
|
2127
|
+
"crossBranch": {
|
|
2128
|
+
"enabled": true,
|
|
2129
|
+
"scanOnMigrationCreate": true,
|
|
2130
|
+
"blockOnConflict": true,
|
|
2131
|
+
"cacheExpiry": 300
|
|
2132
|
+
}
|
|
2133
|
+
}
|
|
2134
|
+
}</code></pre>
|
|
2135
|
+
</div>
|
|
2136
|
+
|
|
2137
|
+
<div class="table-container">
|
|
2138
|
+
<table>
|
|
2139
|
+
<thead>
|
|
2140
|
+
<tr>
|
|
2141
|
+
<th>Option</th>
|
|
2142
|
+
<th>Description</th>
|
|
2143
|
+
<th>
|
|
2144
|
+
<span data-lang="fr">Defaut</span>
|
|
2145
|
+
<span data-lang="en">Default</span>
|
|
2146
|
+
</th>
|
|
2147
|
+
</tr>
|
|
2148
|
+
</thead>
|
|
2149
|
+
<tbody>
|
|
2150
|
+
<tr>
|
|
2151
|
+
<td><code>enabled</code></td>
|
|
2152
|
+
<td>
|
|
2153
|
+
<span data-lang="fr">Activer la validation cross-branch</span>
|
|
2154
|
+
<span data-lang="en">Enable cross-branch validation</span>
|
|
2155
|
+
</td>
|
|
2156
|
+
<td><code>true</code></td>
|
|
2157
|
+
</tr>
|
|
2158
|
+
<tr>
|
|
2159
|
+
<td><code>scanOnMigrationCreate</code></td>
|
|
2160
|
+
<td>
|
|
2161
|
+
<span data-lang="fr">Scanner avant /efcore:migration</span>
|
|
2162
|
+
<span data-lang="en">Scan before /efcore:migration</span>
|
|
2163
|
+
</td>
|
|
2164
|
+
<td><code>true</code></td>
|
|
2165
|
+
</tr>
|
|
2166
|
+
<tr>
|
|
2167
|
+
<td><code>blockOnConflict</code></td>
|
|
2168
|
+
<td>
|
|
2169
|
+
<span data-lang="fr">Bloquer si conflit detecte</span>
|
|
2170
|
+
<span data-lang="en">Block if conflict detected</span>
|
|
2171
|
+
</td>
|
|
2172
|
+
<td><code>true</code></td>
|
|
2173
|
+
</tr>
|
|
2174
|
+
<tr>
|
|
2175
|
+
<td><code>cacheExpiry</code></td>
|
|
2176
|
+
<td>
|
|
2177
|
+
<span data-lang="fr">Duree de cache du scan (secondes)</span>
|
|
2178
|
+
<span data-lang="en">Scan cache duration (seconds)</span>
|
|
2179
|
+
</td>
|
|
2180
|
+
<td><code>300</code></td>
|
|
2181
|
+
</tr>
|
|
2182
|
+
</tbody>
|
|
2183
|
+
</table>
|
|
2184
|
+
</div>
|
|
2185
|
+
</section>
|
|
2186
|
+
|
|
2187
|
+
<!-- ============================================================ -->
|
|
2188
|
+
<!-- SECTION: BONNES PRATIQUES -->
|
|
2189
|
+
<!-- ============================================================ -->
|
|
2190
|
+
<section id="best-practices">
|
|
2191
|
+
<h2>
|
|
2192
|
+
<span data-lang="fr">Bonnes pratiques</span>
|
|
2193
|
+
<span data-lang="en">Best Practices</span>
|
|
2194
|
+
</h2>
|
|
2195
|
+
|
|
2196
|
+
<div class="best-practice">
|
|
2197
|
+
<h4>
|
|
2198
|
+
<span class="bp-icon">✅</span>
|
|
2199
|
+
<span data-lang="fr">Toujours commiter les 3 fichiers ensemble</span>
|
|
2200
|
+
<span data-lang="en">Always commit all 3 files together</span>
|
|
2201
|
+
</h4>
|
|
2202
|
+
<p data-lang="fr">Ne jamais commiter une migration incomplete. <code>/gitflow:3-commit</code> valide automatiquement la presence des 3 fichiers.</p>
|
|
2203
|
+
<p data-lang="en">Never commit an incomplete migration. <code>/gitflow:3-commit</code> automatically validates the presence of all 3 files.</p>
|
|
2204
|
+
</div>
|
|
2205
|
+
|
|
2206
|
+
<div class="best-practice">
|
|
2207
|
+
<h4>
|
|
2208
|
+
<span class="bp-icon">✅</span>
|
|
2209
|
+
<span data-lang="fr">Nommer les migrations de maniere descriptive</span>
|
|
2210
|
+
<span data-lang="en">Name migrations descriptively</span>
|
|
2211
|
+
</h4>
|
|
2212
|
+
<div class="code-block">
|
|
2213
|
+
<pre><code># Bon / Good
|
|
2214
|
+
dotnet ef migrations add AddUserEmailIndex
|
|
2215
|
+
dotnet ef migrations add CreateOrdersTable
|
|
2216
|
+
dotnet ef migrations add AddPaymentStatusToOrders
|
|
2217
|
+
|
|
2218
|
+
# Mauvais / Bad
|
|
2219
|
+
dotnet ef migrations add Migration1
|
|
2220
|
+
dotnet ef migrations add Fix
|
|
2221
|
+
dotnet ef migrations add Update</code></pre>
|
|
2222
|
+
</div>
|
|
2223
|
+
</div>
|
|
2224
|
+
|
|
2225
|
+
<div class="best-practice">
|
|
2226
|
+
<h4>
|
|
2227
|
+
<span class="bp-icon">✅</span>
|
|
2228
|
+
<span data-lang="fr">Verifier les operations destructives</span>
|
|
2229
|
+
<span data-lang="en">Check destructive operations</span>
|
|
2230
|
+
</h4>
|
|
2231
|
+
<p data-lang="fr"><code>/gitflow:3-commit</code> detecte automatiquement et alerte sur les operations suivantes :</p>
|
|
2232
|
+
<p data-lang="en"><code>/gitflow:3-commit</code> automatically detects and alerts on the following operations:</p>
|
|
2233
|
+
|
|
2234
|
+
<div class="table-container">
|
|
2235
|
+
<table>
|
|
2236
|
+
<thead>
|
|
2237
|
+
<tr>
|
|
2238
|
+
<th>Operation</th>
|
|
2239
|
+
<th>
|
|
2240
|
+
<span data-lang="fr">Risque</span>
|
|
2241
|
+
<span data-lang="en">Risk</span>
|
|
2242
|
+
</th>
|
|
2243
|
+
<th>
|
|
2244
|
+
<span data-lang="fr">Niveau</span>
|
|
2245
|
+
<span data-lang="en">Level</span>
|
|
2246
|
+
</th>
|
|
2247
|
+
</tr>
|
|
2248
|
+
</thead>
|
|
2249
|
+
<tbody>
|
|
2250
|
+
<tr>
|
|
2251
|
+
<td><code>DropTable</code></td>
|
|
2252
|
+
<td>
|
|
2253
|
+
<span data-lang="fr">Suppression de table entiere</span>
|
|
2254
|
+
<span data-lang="en">Entire table deletion</span>
|
|
2255
|
+
</td>
|
|
2256
|
+
<td><span class="tag tag-danger">CRITICAL</span></td>
|
|
2257
|
+
</tr>
|
|
2258
|
+
<tr>
|
|
2259
|
+
<td><code>DropColumn</code></td>
|
|
2260
|
+
<td>
|
|
2261
|
+
<span data-lang="fr">Perte de donnees de colonne</span>
|
|
2262
|
+
<span data-lang="en">Column data loss</span>
|
|
2263
|
+
</td>
|
|
2264
|
+
<td><span class="tag tag-danger">CRITICAL</span></td>
|
|
2265
|
+
</tr>
|
|
2266
|
+
<tr>
|
|
2267
|
+
<td><code>DeleteData</code></td>
|
|
2268
|
+
<td>
|
|
2269
|
+
<span data-lang="fr">Suppression de lignes</span>
|
|
2270
|
+
<span data-lang="en">Row deletion</span>
|
|
2271
|
+
</td>
|
|
2272
|
+
<td><span class="tag tag-danger">CRITICAL</span></td>
|
|
2273
|
+
</tr>
|
|
2274
|
+
<tr>
|
|
2275
|
+
<td><code>DropForeignKey</code></td>
|
|
2276
|
+
<td>
|
|
2277
|
+
<span data-lang="fr">Casse l'integrite referentielle</span>
|
|
2278
|
+
<span data-lang="en">Breaks referential integrity</span>
|
|
2279
|
+
</td>
|
|
2280
|
+
<td><span class="tag tag-warning">HIGH</span></td>
|
|
2281
|
+
</tr>
|
|
2282
|
+
<tr>
|
|
2283
|
+
<td><code>DropIndex</code></td>
|
|
2284
|
+
<td>
|
|
2285
|
+
<span data-lang="fr">Impact sur les performances</span>
|
|
2286
|
+
<span data-lang="en">Performance impact</span>
|
|
2287
|
+
</td>
|
|
2288
|
+
<td><span class="tag tag-workflow">MEDIUM</span></td>
|
|
2289
|
+
</tr>
|
|
2290
|
+
</tbody>
|
|
2291
|
+
</table>
|
|
2292
|
+
</div>
|
|
2293
|
+
</div>
|
|
2294
|
+
|
|
2295
|
+
<div class="best-practice">
|
|
2296
|
+
<h4>
|
|
2297
|
+
<span class="bp-icon">✅</span>
|
|
2298
|
+
<span data-lang="fr">Generer des scripts SQL idempotents pour la production</span>
|
|
2299
|
+
<span data-lang="en">Generate idempotent SQL scripts for production</span>
|
|
2300
|
+
</h4>
|
|
2301
|
+
<div class="code-block">
|
|
2302
|
+
<button class="copy-btn">Copy</button>
|
|
2303
|
+
<pre><code># Generate an idempotent SQL script
|
|
2304
|
+
dotnet ef migrations script --idempotent -o ./scripts/migrations/v1.2.0.sql
|
|
2305
|
+
|
|
2306
|
+
# The script checks if each migration has already been applied
|
|
2307
|
+
# before executing it, making it safe for re-execution</code></pre>
|
|
2308
|
+
</div>
|
|
2309
|
+
</div>
|
|
2310
|
+
|
|
2311
|
+
<div class="alert alert-warning">
|
|
2312
|
+
<span class="alert-icon">⚠</span>
|
|
2313
|
+
<div class="alert-content">
|
|
2314
|
+
<h5 data-lang="fr">Anti-patterns a eviter</h5>
|
|
2315
|
+
<h5 data-lang="en">Anti-patterns to avoid</h5>
|
|
2316
|
+
<div class="feature-grid">
|
|
2317
|
+
<div class="feature-item">
|
|
2318
|
+
<span class="feature-icon">❌</span>
|
|
2319
|
+
<span class="feature-text" data-lang="fr">Ne jamais modifier manuellement le ModelSnapshot</span>
|
|
2320
|
+
<span class="feature-text" data-lang="en">Never manually modify the ModelSnapshot</span>
|
|
2321
|
+
</div>
|
|
2322
|
+
<div class="feature-item">
|
|
2323
|
+
<span class="feature-icon">❌</span>
|
|
2324
|
+
<span class="feature-text" data-lang="fr">Ne pas supprimer des migrations deja appliquees en production</span>
|
|
2325
|
+
<span class="feature-text" data-lang="en">Don't delete migrations already applied in production</span>
|
|
2326
|
+
</div>
|
|
2327
|
+
<div class="feature-item">
|
|
2328
|
+
<span class="feature-icon">❌</span>
|
|
2329
|
+
<span class="feature-text" data-lang="fr">Eviter les migrations qui dependent de donnees specifiques</span>
|
|
2330
|
+
<span class="feature-text" data-lang="en">Avoid migrations that depend on specific data</span>
|
|
2331
|
+
</div>
|
|
2332
|
+
<div class="feature-item">
|
|
2333
|
+
<span class="feature-icon">❌</span>
|
|
2334
|
+
<span class="feature-text" data-lang="fr">Ne pas utiliser SQL brut sans tester sur une copie</span>
|
|
2335
|
+
<span class="feature-text" data-lang="en">Don't use raw SQL without testing on a copy</span>
|
|
2336
|
+
</div>
|
|
2337
|
+
</div>
|
|
2338
|
+
</div>
|
|
2339
|
+
</div>
|
|
2340
|
+
</section>
|
|
2341
|
+
|
|
2342
|
+
<!-- ============================================================ -->
|
|
2343
|
+
<!-- SECTION: INTEGRATION GITFLOW -->
|
|
2344
|
+
<!-- ============================================================ -->
|
|
2345
|
+
<section id="integration">
|
|
2346
|
+
<h2>
|
|
2347
|
+
<span data-lang="fr">Integration avec GitFlow</span>
|
|
2348
|
+
<span data-lang="en">GitFlow Integration</span>
|
|
2349
|
+
</h2>
|
|
2350
|
+
|
|
2351
|
+
<p data-lang="fr">
|
|
2352
|
+
Claude Tools integre la gestion des migrations EF Core directement dans le workflow GitFlow :
|
|
2353
|
+
</p>
|
|
2354
|
+
<p data-lang="en">
|
|
2355
|
+
Claude Tools integrates EF Core migration management directly into the GitFlow workflow:
|
|
2356
|
+
</p>
|
|
2357
|
+
|
|
2358
|
+
<div class="card-grid">
|
|
2359
|
+
<div class="card">
|
|
2360
|
+
<div class="card-header">
|
|
2361
|
+
<div class="card-icon" style="background: var(--primary);">1</div>
|
|
2362
|
+
<div>
|
|
2363
|
+
<div class="card-title">/gitflow:1-init</div>
|
|
2364
|
+
<div class="card-subtitle" data-lang="fr">Detection automatique</div>
|
|
2365
|
+
<div class="card-subtitle" data-lang="en">Automatic detection</div>
|
|
2366
|
+
</div>
|
|
2367
|
+
</div>
|
|
2368
|
+
<div class="card-body">
|
|
2369
|
+
<p data-lang="fr">Detecte EF Core et configure les DbContext dans le fichier de configuration.</p>
|
|
2370
|
+
<p data-lang="en">Detects EF Core and configures DbContexts in the config file.</p>
|
|
2371
|
+
</div>
|
|
2372
|
+
</div>
|
|
2373
|
+
|
|
2374
|
+
<div class="card">
|
|
2375
|
+
<div class="card-header">
|
|
2376
|
+
<div class="card-icon" style="background: var(--success);">3</div>
|
|
2377
|
+
<div>
|
|
2378
|
+
<div class="card-title">/gitflow:3-commit</div>
|
|
2379
|
+
<div class="card-subtitle" data-lang="fr">Validation des migrations</div>
|
|
2380
|
+
<div class="card-subtitle" data-lang="en">Migration validation</div>
|
|
2381
|
+
</div>
|
|
2382
|
+
</div>
|
|
2383
|
+
<div class="card-body">
|
|
2384
|
+
<p data-lang="fr">Valide que les 3 fichiers sont presents et detecte les operations destructives.</p>
|
|
2385
|
+
<p data-lang="en">Validates that all 3 files are present and detects destructive operations.</p>
|
|
2386
|
+
</div>
|
|
2387
|
+
</div>
|
|
2388
|
+
|
|
2389
|
+
<div class="card">
|
|
2390
|
+
<div class="card-header">
|
|
2391
|
+
<div class="card-icon" style="background: var(--warning);">4</div>
|
|
2392
|
+
<div>
|
|
2393
|
+
<div class="card-title">/gitflow:4-plan</div>
|
|
2394
|
+
<div class="card-subtitle" data-lang="fr">Analyse des conflits</div>
|
|
2395
|
+
<div class="card-subtitle" data-lang="en">Conflict analysis</div>
|
|
2396
|
+
</div>
|
|
2397
|
+
</div>
|
|
2398
|
+
<div class="card-body">
|
|
2399
|
+
<p data-lang="fr">Detecte les conflits potentiels de ModelSnapshot entre branches.</p>
|
|
2400
|
+
<p data-lang="en">Detects potential ModelSnapshot conflicts between branches.</p>
|
|
2401
|
+
</div>
|
|
2402
|
+
</div>
|
|
2403
|
+
|
|
2404
|
+
<div class="card">
|
|
2405
|
+
<div class="card-header">
|
|
2406
|
+
<div class="card-icon" style="background: var(--secondary);">5</div>
|
|
2407
|
+
<div>
|
|
2408
|
+
<div class="card-title">/gitflow:5-exec</div>
|
|
2409
|
+
<div class="card-subtitle" data-lang="fr">Resolution automatique</div>
|
|
2410
|
+
<div class="card-subtitle" data-lang="en">Automatic resolution</div>
|
|
2411
|
+
</div>
|
|
2412
|
+
</div>
|
|
2413
|
+
<div class="card-body">
|
|
2414
|
+
<p data-lang="fr">Resout les conflits ModelSnapshot automatiquement pendant le rebase.</p>
|
|
2415
|
+
<p data-lang="en">Resolves ModelSnapshot conflicts automatically during rebase.</p>
|
|
2416
|
+
</div>
|
|
2417
|
+
</div>
|
|
2418
|
+
</div>
|
|
2419
|
+
</section>
|
|
2420
|
+
|
|
2421
|
+
<!-- ============================================================ -->
|
|
2422
|
+
<!-- SECTION: CONFIGURATION -->
|
|
2423
|
+
<!-- ============================================================ -->
|
|
2424
|
+
<section id="configuration">
|
|
2425
|
+
<h2>Configuration</h2>
|
|
2426
|
+
|
|
2427
|
+
<p data-lang="fr">La configuration EF Core est stockee dans <code>.claude/gitflow/config.json</code> :</p>
|
|
2428
|
+
<p data-lang="en">EF Core configuration is stored in <code>.claude/gitflow/config.json</code>:</p>
|
|
2429
|
+
|
|
2430
|
+
<div class="code-block">
|
|
2431
|
+
<button class="copy-btn">Copy</button>
|
|
2432
|
+
<pre><code>{
|
|
2433
|
+
"efcore": {
|
|
2434
|
+
"enabled": true,
|
|
2435
|
+
"autoDetect": true,
|
|
2436
|
+
"contexts": [
|
|
2437
|
+
{
|
|
2438
|
+
"name": "ApplicationDbContext",
|
|
2439
|
+
"projectPath": "./src/Data",
|
|
2440
|
+
"migrationsFolder": "Migrations",
|
|
2441
|
+
"startupProject": "./src/Api"
|
|
2442
|
+
}
|
|
2443
|
+
],
|
|
2444
|
+
"database": {
|
|
2445
|
+
"configFile": "appsettings.Local.json",
|
|
2446
|
+
"connectionStringName": "DefaultConnection",
|
|
2447
|
+
"provider": "SqlServer"
|
|
2448
|
+
},
|
|
2449
|
+
"naming": {
|
|
2450
|
+
"pattern": "{BranchType}_{Version}_{BranchName}_{Description}"
|
|
2451
|
+
},
|
|
2452
|
+
"crossBranch": {
|
|
2453
|
+
"enabled": true,
|
|
2454
|
+
"scanOnMigrationCreate": true,
|
|
2455
|
+
"blockOnConflict": true,
|
|
2456
|
+
"cacheExpiry": 300
|
|
2457
|
+
},
|
|
2458
|
+
"validation": {
|
|
2459
|
+
"validateBeforeCommit": true,
|
|
2460
|
+
"validateBeforeMerge": true,
|
|
2461
|
+
"checkModelSnapshotConflicts": true,
|
|
2462
|
+
"crossBranchValidation": true,
|
|
2463
|
+
"requireBuildSuccess": true,
|
|
2464
|
+
"warnOnPendingMigrations": true
|
|
2465
|
+
},
|
|
2466
|
+
"backup": {
|
|
2467
|
+
"enabled": true,
|
|
2468
|
+
"beforeRebase": true,
|
|
2469
|
+
"beforeSquash": true,
|
|
2470
|
+
"beforeMerge": true,
|
|
2471
|
+
"retentionDays": 7,
|
|
2472
|
+
"location": ".claude/gitflow/backup/migrations"
|
|
2473
|
+
},
|
|
2474
|
+
"rules": {
|
|
2475
|
+
"oneMigrationPerFeature": true,
|
|
2476
|
+
"recreateOnChange": true,
|
|
2477
|
+
"requireDescription": true,
|
|
2478
|
+
"validateNaming": true
|
|
2479
|
+
},
|
|
2480
|
+
"scripts": {
|
|
2481
|
+
"generateOnRelease": true,
|
|
2482
|
+
"outputPath": "./scripts/migrations",
|
|
2483
|
+
"idempotent": true
|
|
2484
|
+
}
|
|
2485
|
+
}
|
|
2486
|
+
}</code></pre>
|
|
2487
|
+
</div>
|
|
2488
|
+
</section>
|
|
2489
|
+
|
|
2490
|
+
</div>
|
|
2491
|
+
</main>
|
|
2492
|
+
</div>
|
|
2493
|
+
</div>
|
|
2494
|
+
|
|
2495
|
+
<!-- Mobile Menu Button -->
|
|
2496
|
+
<button class="mobile-menu-btn">☰</button>
|
|
2497
|
+
<div class="overlay"></div>
|
|
2498
|
+
|
|
2499
|
+
<script src="js/app.js"></script>
|
|
2500
|
+
</body>
|
|
2501
|
+
</html>
|