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 ?
Réponses
Trop de publicités?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);
}
La réponse la plus complète que j'ai trouvée est donc la suivante :
- Supprimer
Migrations
dans votre projet. - Définir
Database.SetInitializer<DatabaseContext>(null);
dans l'initialisateur de votre DatabaseContext. - Supprimer le tableau
__MigrationHistory
dans votre base de données. Pour EF6+, la table est située sousTables
mais pour les versions antérieures, il est situé sousSystem Tables
. - Construire et exécuter.
- Profit.
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.
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.
Je viens de résoudre ce "problème" en
- Suppression de la table "_MigrationHistory" de la base de données.
- Suppression du dossier "Migrations" du projet.
- Mise à jour du fichier EDMX.
- 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