web-dev-qa-db-fra.com

Comment puis-je désactiver le code des premières migrations

J'ai un modèle d'entité code premier dans EF5. Mais je veux gérer les modifications de base de données manuellement - je ne veux pas que EF modifie ma base de données existante et toutes ses données. Mais lorsque je modifie parallèlement le mappage EF et la base de données, EF refuse de fonctionner correctement, me disant que je dois utiliser le code en premier lieu. Comment puis-je désactiver cela?

69
Stan Hargrove

définissez Database.SetInitializer sur 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);
    }
82
Sarath Rachuri

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

  1. Supprimez le dossier Migrations dans votre projet. 
  2. Définissez Database.SetInitializer<DatabaseContext>(null); dans votre initialiseur DatabaseContext. 
  3. Supprimez la table __MigrationHistory dans votre base de données. Pour EF6 +, la table est située sous Tables, mais pour les versions antérieures, elle se trouve sous System Tables.
  4. Construire et exécuter.
  5. Profit.
33
karlingen

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

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

Cependant, j’ai jugé préférable de garder le premier code activé pour les migrations, mais utilisez l’option -Script pour que EF crée pour moi un script de changement de base de données que je peux appliquer manuellement à chaque base de données (développement, assurance qualité, production):

Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject

De cette façon, EF créera le script de changement pour moi et je garde toujours le contrôle total sur les changements appliqués. Je modifie les scripts de changement comme n'importe quel autre code source.

24
Eric J.

Si vous avez déjà utilisé Migrations, le fait de modifier uniquement Initializer ne vous aidera pas. Vous devez accéder à Management Studio, ouvrir vos tables de base de données, accéder au dossier System Tables et supprimer la table __MigrationHistory située à cet emplacement (à partir de EF6, elle se trouve directement sous Tables. Cela désactivera les migrations pour de bon.

21
Episodex

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

  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.

Mon environnement est

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