90 votes

Comment désactiver les migrations "code first" ?

J'ai un modèle d'entité "code-first" dans EF5. Mais je veux gérer les modifications de la base de données manuellement -- je ne veux pas qu'EF modifie ma base de données existante et toutes ses données. Mais lorsque je fais des changements parallèles dans le mapping EF et dans la base de données, EF refuse de fonctionner correctement en me disant que je dois utiliser la migration code first. Comment puis-je désactiver cette fonction ?

105voto

Sarath Rachuri Points 1846

Définir le Database.SetInitializer à null.

public class DatabaseContext: DbContext
{
    //the base accepts the name of the connection string provided in the web.config as a parameter
    public DatabaseContext()
        : base("DatabaseContext")
    {
        //disable initializer
        Database.SetInitializer<DatabaseContext>(null);
    }

44voto

karlingen Points 975

La réponse la plus complète que j'ai trouvée est donc la suivante :

  1. Supprimer Migrations dans votre projet.
  2. Définir Database.SetInitializer<DatabaseContext>(null); dans l'initialisateur de votre DatabaseContext.
  3. Supprimer le tableau __MigrationHistory dans votre base de données. Pour EF6+, la table est située sous Tables mais pour les versions antérieures, il est situé sous System Tables .
  4. Construire et exécuter.
  5. Profit.

28voto

Eric J. Points 73338

Si vous voulez désactiver complètement les migrations :

https://stackoverflow.com/a/9709407/141172

Cependant, j'ai trouvé qu'il était préférable de garder les migrations de code en premier activées, mais d'utiliser la fonction -Script option permettant à EF de créer pour moi un script de changement de base de données que je peux appliquer manuellement à chaque base de données (développement, QA, production) :

Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject

De cette façon, EF créera la modification script pour moi, et je garde un contrôle total sur les modifications appliquées. Je versionne la modification script comme tout autre code source.

26voto

Episodex Points 1723

Si vous avez déjà utilisé les Migrations, changer uniquement l'Initializer ne vous aidera pas. Vous devez aller dans Management Studio, ouvrir vos tables de base de données, aller à System Tables et supprimer __MigrationHistory qui se trouve à cet endroit (pour les versions EF6 et supérieures, elle se trouve directement sous la rubrique Tables ). Cela désactivera définitivement les migrations.

2voto

Clark Kent Points 5845

Je viens de résoudre ce "problème" en

  1. Suppression de la table "_MigrationHistory" de la base de données.
  2. Suppression du dossier "Migrations" du projet.
  3. Mise à jour du fichier EDMX.
  4. Nettoyer le projet et le reconstruire.

La configuration de mon environnement est la suivante

1. Visual Studio 2017 15.8.2
2. ASP NET MVC project
3. .NET Framework 4.6.1
4. Entity Framework 6.2.0

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