création automatique de la base de données dans le Cadre de l'Entité de Base
Mon application qui est en cours de porté sur .NET de base sera le nouveau EF Base SQLite. Je veux créer automatiquement la base de données et les structures de tables lors de l'application de la première exécution. Selon l'EF documentation de base c'est fait à l'aide des commandes manuelles
dotnet ef migrations add MyFirstMigration
dotnet ef database update
Mais je ne veux pas la fin de l'utilisateur à entrer ces commandes et préférez l'application est de créer et d'installation de la base de données pour la première utilisation. Pour EF 6 il existe des fonctionnalités comme
Database.SetInitializer(new CreateDatabaseIfNotExists<MyContext>());
Mais en EF de Base ne semblent pas exister. Je ne trouve pas d'exemples ou de la documentation sur quelque chose d'équivalent pour les EF de base et il n'est pas mentionné dans la liste des fonctionnalités manquantes dans l'EF la documentation de base. J'ai le modèle des classes d'installation déjà donc je pourrais écrire un peu de code pour initialiser la base de données basée sur les modèles, mais il serait tas plus facile si le cadre fait cela automatiquement. Je ne veux pas la génération automatique du modèle ou de la migration, il suffit de créer les structures de la table sur une nouvelle base de données.
Suis-je manque quelque chose ici, ou est la création automatique de la table de fonction manquant en EF core?
Vous devez vous connecter pour publier un commentaire.
Si vous avez créé des migrations, vous pouvez exécuter dans le de Démarrage.cs comme suit.
Cela va créer la base de données et les tables à l'aide de votre ajoutés migrations.
Si vous n'êtes pas à l'aide de Entity Framework Migrations, et, au lieu juste besoin de votre DbContext modèle créé exactement comme il est dans votre contexte de la classe à la première exécution, vous pouvez utiliser:
À la place.
Si vous devez supprimer de votre base de données avant de faire en sorte qu'il est créé, composez le:
Juste avant l'appel à EnsureCreated()
Adapté de: http://docs.identityserver.io/en/release/quickstarts/8_entity_framework.html?highlight=entity
Ma réponse est très similaire à Ricardo de la réponse, mais j'ai l'impression que mon approche est un peu plus simple tout simplement parce qu'il ya tellement de choses dans sa
using
fonction que je ne suis même pas sûr exactement comment il fonctionne à un niveau inférieur.Donc, pour ceux qui veulent un moyen simple et propre solution qui crée une base de données pour vous, où vous savez exactement ce qui se passe sous le capot, c'est pour vous:
Ce joli beaucoup signifie qu'au sein de la
DbContext
que vous avez créé (dans ce cas, la mienne est appeléTargetsContext
), vous pouvez utiliser une instance de laDbContext
pour s'assurer que les tables définies dans la classe sont créés lorsque de Démarrage.cs est exécuté dans votre application.EnsureCreated
totalement contourne les migrations et crée le schéma pour vous, vous ne pouvez pas mélanger cela avec les migrations.EnsureCreated
est conçu pour tester ou de prototypage rapide où vous êtes ok avec le décrochage et la re-création de la base de données à chaque fois. Si vous utilisez les migrations et l'a appliquée automatiquement sur l'app démarrer, puis vous pouvez utilisercontext.Database.Migrate()
à la place.Si vous obtenez le contexte via la liste des paramètres de configuration de Démarrage.cs, Vous pouvez à la place faire:
Si vous n'avez pas créé de migrations, il y a 2 options
1.créer la base de données et les tables de l'application Principale:
2.créer les tables, si la base de données existe déjà:
Grâce à Bubi est réponse
EnsureCreated
ouEnsureDeleted
ouDatabase.Migrate
va échouer"Pour EF Core 2.0+ j'ai eu à prendre une approche différente parce qu'ils ont changé l'API. En Mars 2019 Microsoft recommande vous mettez votre migration de base de données de code dans votre application à l'entrée de la classe, mais à l'extérieur de l'Hébergeur construire code.