128 votes

Comment supprimer et recréer de zéro une base de données EF Code First existante ?

J'utilise EF Code First avec EF 5 dans VS 2012. J'utilise PM update-database et j'ai une méthode simple pour remplir quelques tableaux avec des données d'exemple.

Je voudrais supprimer et recréer mon x.mdb. L'historique des mises à jour semble être désynchronisé. Si je commente tous mes DBSets dans mon contexte, update-database fonctionne sans erreur mais laisse quelques tables dans la BD. Comme je n'ai pas de données de valeur dans la base de données, il semble que le plus simple soit de tout réinitialiser.

Comment puis-je y parvenir ?

156voto

NSGaga Points 7386

Si je comprends bien...

Si vous voulez start clean :

1) Suppression manuelle de votre BD - où qu'il soit (je suppose que vous avez réglé votre connexion), ou le vider, mais le plus simple/sécuritaire est de le supprimer tous ensemble - car il y a system __MigrationHistory table - il faut aussi l'enlever.

2) Supprimer tout migration files - qui sont sous Migrations - et nommés comme des numéros, etc. - supprimez-les tous,

3) Reconstruire votre projet contenant les migrations (et le reste) - et assurez-vous que votre projet est paramétré (configuration) pour se construire automatiquement (cela peut parfois poser des problèmes - mais probablement pas pour vous),

4) Courir Add-Migration Initial encore - alors Update-Database

79voto

Gizmo3399 Points 621

Pour EntityFrameworkCore, vous pouvez utiliser ce qui suit :

Update-Database -Migration 0

Cela supprimera toutes les migrations de la base de données. Ensuite, vous pouvez utiliser :

Remove-Migration

Pour supprimer votre migration. Enfin, vous pouvez recréer votre migration et l'appliquer à la base de données.

Add-Migration Initialize
Update-Database

Testé sur EFCore v2.1.0

De même pour l'outil CLI dotnet ef :

dotnet ef database update 0 [ --context dbcontextname ]
dotnet ef migrations add Initialize
dotnet ef database update

68voto

Daf De Giraf Points 761

Si vous avez travaillé de la manière correcte pour créer vos migrations en utilisant la commande Add-Migration "Name_Of_Migration" alors vous pouvez faire ce qui suit pour obtenir un un départ sans faute (remise à zéro, avec perte de données, bien sûr ) :

  1. Update-database -TargetMigration:0

    Normalement, votre base de données est vide maintenant depuis que les méthodes de descente ont été exécutées.

  2. Update-database

    Cela recréera votre base de données en fonction de votre migration actuelle.

34voto

Amadeo Gallardo Points 495

Single Liner pour déposer, créer et ensemencer à partir de la console du gestionnaire de paquets :

update-database -TargetMigration:0 | update-database -force

Kaboom.

7voto

J'utilise .net Core 6 et ce code est directement extrait du Program.cs.

using Microsoft.EntityFrameworkCore;

namespace RandomProjectName
{
    public class Program
    {
        public static async Task<int> Main(string[] args)
        {
            var connectionString = "Server=YourServerName;Database=YourDatabaseName;Integrated Security=True;";

            var optionsBuilder = new DbContextOptionsBuilder<YourDataContext>();
            optionsBuilder.UseSqlServer(connectionString);

            var db = new YourDataContext(optionsBuilder.Options);
            db.Database.EnsureDeleted();
            db.Database.Migrate();
        }
    }
}

Vous devez avoir au moins une migration initiale pour que cela fonctionne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X