Créer automatiquement de la Base de données dans l'Entity Framework 6 avec les Migrations Automatiques Désactivé
Je voudrais être capable de créer automatiquement une nouvelle base de données, si elle n'existe pas, à l'aide de code-première EF6, mais avec les migrations automatiques désactivées.
Si je me souviens bien, avant les migrations automatiques existé dans l'Entity Framework, cela a très bien fonctionné. Cependant, EF6, je reçois l'exception suivante:
Une exception de type 'System.Les données.De l'entité.Les Migrations.L'Infrastructure.AutomaticMigrationsDisabledException'
s'est produite dans EntityFramework.dll mais n'a pas été traitée dans le code utilisateurInformations supplémentaires: Impossible de mettre à jour la base de données pour correspondre le modèle actuel parce qu'il y a des changements en cours et automatique
la migration est désactivé. Écrire dans l'attente de changements de modèle à un
basées sur le code de la migration ou de permettre la migration automatique. Ensemble
DbMigrationsConfiguration.AutomaticMigrationsEnabled à true pour activer l'
migration automatique.
De vérifier que cette exception n'a pas été causé par un facteur externe dans mon projet, j'ai créé un nouveau projet de test. Cependant, je reçois la même exception.
Pour mon contexte de base de données, j'ai:
public class MyContext : DbContext
{
public DbSet<Entity> Entities { get; set; }
public MyContext()
{
Database.SetInitializer(new CreateDatabaseIfNotExists<MyContext>());
}
}
Puis j'ai ajouté une migrations de base de données fichier de configuration pour désactiver les migrations automatiques:
public class DatabaseConfiguration : DbMigrationsConfiguration<MyContext>
{
public DatabaseConfiguration()
{
this.AutomaticMigrationsEnabled = false;
}
}
J'ai juste besoin d'être en mesure de créer une nouvelle base de données si l'un n'existe pas (afin que je puisse rapidement supprimer et recréer une nouvelle base de données pour un développement rapide sur ma machine de dev). Cependant, je ne veux pas activer les migrations automatiques parce que nous ne les migrations en cours de production avec les outils 3ème partie, et EF6 se plaint si le schéma a changé lorsque les migrations automatiques est activée.
Aucune indication ou d'autres options qui répondent à ces besoins seraient grandement appréciés. Merci!
Non, nous allons à l'aide de Porte Rouge SQL Comparer à suivre les modifications apportées à la base de données.
mais vous avez encore des migrations et un dossier de
DbMigrationsConfiguration
?Non, il n'y a pas de migrations dossier soit dans visual studio ou dans le système de fichiers. J'ai créé le DbMigrationsConfiguration sous-classe spécialement pour désactiver les migrations automatiques. Donc, au meilleur de ma connaissance, code-première des migrations n'a jamais été activé ou utilisé.
OriginalL'auteur Matthew Renze | 2015-07-14
Vous devez vous connecter pour publier un commentaire.
Vous pourriez peut-être...
Ensemble de la base de données de l'initialiseur de null (pour désactiver la vérification de compatibilité des modèles)
Appeler explicitement
MyContext.La base de données.CreateIfNotExists()
à un moment approprié de votre choix.Modifier
Si vous n'êtes pas en utilisant le Premier Code des Migrations, il semble que vous devez retirer le
DbMigrationsConfiguration
:https://msdn.microsoft.com/en-us/magazine/dn818489.aspx
Je pense qu'il doit être en train de faire la même chose, même si vous n'utilisez pas un initialiseur.
prooooobably pas quelle est la cause de l'exception (car je suis sûr que vous avez ajouté vous-même à le faire fonctionner), mais j'ai oublié le paramètre de type. En tout cas, pas sûr de savoir pourquoi vous souhaitez toujours arriver que l'exception. Avez-vous utilisé le premier code des migrations sur ce projet dans le passé?
Quand je l'ai testé ton code, j'ai copier/coller directement dans un projet de test qui n'a jamais utilisé de code-première migrations. Donc, non, le projet n'a pas utilisé de code-première les migrations dans le passé. En outre, comme vous l'avez souligné, je n'ai compléter le type de paramètre lors de l'intellisense qui m'a incité à le faire. Êtes-vous en mesure d'obtenir votre code d'échantillon de travailler dans un test isolé projet?
ouais, on dirait qu'il travaille. Nouvelle application de console, le contexte avec qui intializer, une DbSet de la propriété, un modèle de classe avec deux propriétés. Appelé
CreateIfNotExists
, ajout d'une entité, les modifications enregistrées, ont créé un nouveau contexte, l'a chargé. Ne semblent pas avoir de problèmes.Je l'ai essayé une deuxième fois à partir de zéro, mais il ne semble toujours pas de travail (c'est à dire j'obtiens toujours la même exception). J'ai posté le code que j'utilise sur github à l'aide de gist à l'adresse suivante. Seriez-vous prêt à prendre un coup d'oeil et voir si je suis en train de faire quelque chose de différent de ce que vous faites? Merci! gist.github.com/matthewrenze/8101479dcc28d343c874
OriginalL'auteur jjj