From 58d4ebc44b08a44800303da32826fdadddb8d178 Mon Sep 17 00:00:00 2001 From: mathieu Date: Fri, 21 Aug 2026 11:24:48 +0200 Subject: [PATCH] =?UTF-8?q?=C3=89crire=20une=20migration=20n'a=20plus=20?= =?UTF-8?q?=C3=A0=20ouvrir=20la=20base=20de=20d=C3=A9veloppement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `dotnet ef` exécute `Program.cs` pour retrouver les services — or `Program.cs` appelle `Database.Migrate()` au démarrage. Générer une migration supposait donc d'ouvrir la base de développement : au mieux inutile, au pire bloquant. Constaté sur un système de fichiers réseau, où le verrou SQLite ne se prend jamais : l'outil attendait cinq minutes, renonçait, et laissait derrière lui un processus qui verrouillait les binaires. Une fabrique de conception coupe court : produire une migration n'ouvre aucune base, et sa chaîne de connexion ne sert qu'à la génération du code. Co-Authored-By: Claude Opus 5 --- .../Data/FabriqueDbContextConception.cs | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 MaBibli.Api/Data/FabriqueDbContextConception.cs diff --git a/MaBibli.Api/Data/FabriqueDbContextConception.cs b/MaBibli.Api/Data/FabriqueDbContextConception.cs new file mode 100644 index 0000000..a6081fe --- /dev/null +++ b/MaBibli.Api/Data/FabriqueDbContextConception.cs @@ -0,0 +1,33 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; + +namespace MaBibli.Api.Data; + +/// +/// Fabrique le pour les outils (dotnet ef), sans +/// démarrer l'application. +/// +/// +/// Sans elle, dotnet ef exécute Program.cs pour retrouver les services — et +/// Program.cs appelle Database.Migrate() au démarrage. Écrire une migration +/// suppose alors d'ouvrir la base de développement, ce qui est au mieux inutile et au pire +/// bloquant (constaté sur un système de fichiers réseau, où le verrou SQLite ne se prend +/// jamais : l'outil attendait cinq minutes puis renonçait). +/// +/// ⚠️ La chaîne de connexion ci-dessous ne sert qu'à la génération du code : produire +/// une migration n'ouvre aucune base. Elle n'a donc pas à correspondre à quoi que ce soit, et +/// surtout pas à la base de production, qui est configurée par ConnectionStrings__MaBibli +/// dans l'unité systemd. +/// +/// +public sealed class FabriqueDbContextConception : IDesignTimeDbContextFactory +{ + public MaBibliDbContext CreateDbContext(string[] args) + { + var options = new DbContextOptionsBuilder() + .UseSqlite("Data Source=mabibli-conception.db") + .Options; + + return new MaBibliDbContext(options); + } +}