J'utilise l'approche Code First dans Entity Framework.

J'ai créé un initialiseur de base de données personnalisé comme ci-dessous.

public class CustomInit : IDatabaseInitializer<APIContext>
    {
        public void InitializeDatabase(APIContext context)
        {
            bool dbExists;

            dbExists = context.Database.Exists();

            if (dbExists)
            {
                // remove all tables
                context.Database.ExecuteSqlCommand(
                   "EXEC sp_MSforeachtable @command1 = \"DROP TABLE ?\"");

                // create all tables
                var dbCreationScript = ((IObjectContextAdapter)
                       context).ObjectContext.CreateDatabaseScript();
                context.Database.ExecuteSqlCommand(dbCreationScript);

                context.SaveChanges();
            }
            else
            {
                throw new ApplicationException("No database is present");
            }
        }
    }

Conformément au code ci-dessus, toutes les tables de la base de données sont supprimées et recréées.

Ce que je dois faire est de supprimer et de créer des tables / entités qui sont modifiées dans le code comme - ajouter ou supprimer une colonne, etc.

Y a-t-il une façon de faire cela?

Tout conseil est très apprécié.

0
Dheeraj Kumar 7 août 2017 à 14:27

2 réponses

La solution la plus simple consiste à ajouter cette initialisation à votre constructeur dans votre contexte:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext>());

Cela vérifiera votre modèle par rapport à la base de données à chaque fois que vous exécuterez votre programme, et supprimera et recréera automatiquement la base de données si le modèle a été modifié.

Si vous ne souhaitez pas supprimer la base de données et simplement la mettre à jour, vous pouvez utiliser l'initialisation suivante:

Database.SetInitializer<MyContext>(new MigrateDatabaseToLatestVersion<MyContext, Config>());

Sachez cependant que aucun de ces éléments ne fonctionne dans Entity Framework Core , car Microsoft n'a pas et n'a pas l'intention de mettre en œuvre des migrations automatiques pour la version .Net Core.

0
stybl 7 août 2017 à 11:39

Vous pouvez revenir à la migration initiale que vous avez appliquée en mettant à jour la base de données.

Update-database -targetMigration "MigrationName"

La commande ci-dessus annule toutes les modifications de base de données que vous avez appliquées dans le cadre des migrations EF.

0
Madhu 7 août 2017 à 18:27