ASP - Core Migrer EF Base SQL DB au Démarrage
Est-il possible d'avoir mon ASP Web de Base de l'API de s'assurer de la DB est migré vers la dernière migration à l'aide de EF de Base? Je sais que cela peut être fait par le biais de la ligne de commande, mais je veux le faire par programmation.
Mise à jour
Basé sur la réponse de Janshair Khan, je suis venu avec cette classe d'assistance:
using Microsoft.AspNetCore.Builder;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MyWebApi.Models;
namespace MyWebApi
{
public static class DataSeeder
{
public static void SeedData(this IApplicationBuilder app)
{
var context = app.ApplicationServices.GetService<MyContext>();
if (!context.Database.EnsureCreated())
context.Database.Migrate();
}
}
}
Vous pouvez appeler à partir de la Configure
méthode dans votre Startup.cs
comme ceci:
app.SeedData();
- pas encore fait devraient être mises en œuvre avec la prochaine version. Vous pouvez utiliser la solution de contournement qui est affiché ci-dessous à partir de Khan.
- Voir les réponses ci-dessous. Vous devez utiliser EnsureCreated ou de Migrer. Pas les deux.
- La documentation officielle dit: "N'appelez pas EnsureCreated() avant de Migrer(). EnsureCreated() ignore les Migrations afin de créer le schéma et la cause de Migrer() à l'échec.' : docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
pour obtenir votre base de données à jour avec votre modèle actuel. Si vous souhaitez activer les migrations (Si, à la suite de migrations sont soupçonnés), puis utilisez
et de mettre votre migrations de plus de temps.
using Microsoft.EntityFrameworkCore;
.Une note de la documentation sur l'appel à
db.Database.EnsureCreated()
:Vous voulez juste l'appel
db.Database.Migrate()
.Commentaire prises à partir de la source se trouve au-dessus de la déclaration de ici.
Utilisez code ci-dessous pour exécuter la migration à
Basé sur la réponse de @steamrolla je propose les améliorations suivantes:
Avec cela, vous pouvez également assurer la migration de différents contextes, par exemple, si vous avez une base de données d'Identité.
Utilisation:
Basé sur chintan310 réponse, voici comment j'ai migrer la base de données. Cela garantit la séparation de la base de données des tâches liées à
Program.cs
:Je l'ai fait à migrer par programme avec les objectifs EF de Base 2.1.2 & SQL Server, sur la base des réponses ici et bailando bailando réponse sur "Comment et où, à l'appel de la Base de données.EnsureCreated et de la Base de données.Migrer?":
De démarrage.cs
Le projet à l'aide de ce code est disponible sur Github.
C'est une légère correction de la réponse précédente qui a créé une méthode d'extension. Il corrige l'erreur qui est jeté à la façon dont elle est écrite.