Mon application qui est portée sur .NET Core utilisera le nouvel EF Core avec SQLite. Je souhaite créer automatiquement la base de données et les structures de table lors de la première exécution de l'application. Selon la documentation principale d'EF, cela se fait à l'aide de commandes manuelles
dotnet ef migrations add MyFirstMigration
dotnet ef database update
Cependant, je ne veux pas que l'utilisateur final entre ces commandes et je préférerais que l'application crée et configure la base de données pour la première utilisation. Pour EF 6, il existe des fonctionnalités telles que
Database.SetInitializer(new CreateDatabaseIfNotExists<MyContext>());
Mais dans EF Core, ils ne semblent pas exister. Je ne trouve aucun exemple ou documentation sur quelque chose d'équivalent pour EF core et il n'est pas mentionné dans la liste des fonctionnalités manquantes dans la documentation EF core. J'ai déjà configuré les classes de modèle pour que je puisse écrire du code pour initialiser la base de données en fonction des modèles, mais ce serait beaucoup plus facile si le framework le faisait automatiquement. Je ne veux pas créer automatiquement le modèle ou migrer, créez simplement les structures de table sur une nouvelle base de données.
Est-ce que je manque quelque chose ici ou la fonction de création automatique de table manque-t-elle dans le noyau EF?
la source
Ma réponse est très similaire à la réponse de Ricardo, mais je pense que mon approche est un peu plus simple simplement parce qu'il se passe tellement de choses dans sa
using
fonction que je ne sais même pas comment cela fonctionne exactement à un niveau inférieur.Donc, pour ceux qui veulent une solution simple et propre qui crée pour vous une base de données où vous savez exactement ce qui se passe sous le capot, c'est pour vous:
Cela signifie à peu près que dans le
DbContext
que vous avez créé (dans ce cas, le mien est appeléTargetsContext
), vous pouvez utiliser une instance deDbContext
pour vous assurer que les tables définies dans la classe sont créées lorsque Startup.cs est exécuté dans votre application.la source
EnsureCreated
contourne totalement les migrations et crée simplement le schéma pour vous, vous ne pouvez pas mélanger cela avec des migrations.EnsureCreated
est conçu pour les tests ou le prototypage rapide où vous êtes d'accord pour supprimer et recréer la base de données à chaque fois. Si vous utilisez des migrations et que vous souhaitez les appliquer automatiquement au démarrage de l'application, vous pouvez utiliser à lacontext.Database.Migrate()
place.IHostingEnvironment
c'est maintenant obsolète et que l'alternative recommandée estMicrosoft.AspNetCore.Hosting.IWebHostEnvironment
.Si vous obtenez le contexte via la liste de paramètres de Configure dans Startup.cs, vous pouvez à la place faire ceci:
la source
Pour EF Core 2.0+, j'ai dû adopter une approche différente car ils ont changé l'API. Depuis mars 2019, Microsoft vous recommande de placer le code de migration de votre base de données dans la classe d'entrée de votre application, mais en dehors du code de génération WebHost.
la source
Si vous n'avez pas créé de migrations, il existe 2 options
1. créez la base de données et les tables à partir de l'application principale:
2. créez les tables si la base de données existe déjà:
Merci à la réponse de Bubi
la source
EnsureCreated
ouEnsureDeleted
ouDatabase.Migrate
échouera »