Pas de création initiale avec Entity Framework migrations
J'essaye de l'Entité cadre des migrations de travail. J'ai activé le premier code des migrations, de son créé un des migrations dossier, le fichier de configuration et le mig table d'historique, mais pas de création initiale. Ai-je raté une étape? C'est une nouvelle bd créé par EF (4.3.1).
- Après avoir Activer les Migrations, vous devez Ajouter de la Migration
- n'est-il pas ajouter dans la création initiale de la migration automatiquement?
- cela peut vous aider stackoverflow.com/questions/11679385/...
Vous devez vous connecter pour publier un commentaire.
Ce comportement n'est pas par défaut, mais il est disponible pour vous facilement dans de nombreuses formes différentes.
Vous pouvez appeler
context.Database.CreateIfNotExists();
au démarrage de l'application.Vous pouvez utiliser l'une de l'intégré dans
DatabaseInitializer
s. LeCreateDatabaseIfNotExists
initialiseur est intégré dans EntityFramework et a juste besoin d'être ajouté à votre projet.Vous pouvez créer votre propre base de données de l'initialiseur qui comprend l'option n ° 1 à l'intérieur de lui-même. Exemple: Le Premier Code des Migrations et de l'initialisation
Vous pouvez inclure DatabaseInitializers dans votre projet, que ce soit par un code ou par l'intermédiaire d'un fichier de configuration.
Comprennent un EntityFramework Initialiseur de Base de données via le code:
Dans votre démarrage de l'application, vous pouvez configurer la DatabaseInitializer comme suit:
REMARQUE: ce code a changé plusieurs fois tout au long de la vie de entityframework! Cet exemple est pour EF 4.3 quelle est la version de production actuelle disponible via nuget.
Comprennent un EntityFramework Initialiseur de Base de données via l'élément de configuration:
Vous remarquerez que cela peut être un peu "maladroit" avec cette configuration. Vous avez besoin de remplacer
AssemblyName
ci-dessus avec le nom de l'assembly que vous gardez votre entityframework trucs, remplacezMyNamespace.MyEFDataContext
avec le nom complet de votre entityframework le contexte des données, et de les remplacerMyNamespace.Migrations.Configuration
avec le nom pleinement qualifié pour votre classe de configuration (par défaut dans la Migration de dossier à l'intérieur de votre projet).EDIT: Modifié pour répondre à d'autres commentaires
Une migration est un changement de définition de schéma à l'autre de définition de schéma. La création de la base de données vide n'est pas une migration (mais après tout c'est). Il n'y aura pas de migration de source de fichier dans votre projet de création d'un vide db, ce qui est fait dans le code par l'initialiseur.
Si vous utilisez déjà le
DropCreateDatabaseAlways
initialiseur il convient de le faire. Cependant, j'ai remarqué que vous êtes en paramètre l'initialiseur, dans le code, ce qui signifie qu'il est l'occasion pour un problème de synchronisation (réglage de l'initialiseur après votre contexte est déjà passé le point d'appeler tout les initialiseurs).Vous pouvez forcer entityframework pour exécuter votre initialiseur à n'importe quel point dans le code avec
context.Database.Initialize(true);
(Le paramètre est un vrai/faux pour forcer l'initialisation indépendamment de l'état actuel). Qui serait de supprimer et recréer votre base de données à chaque fois.Mais vous pouvez aussi assurez-vous que votre initialiseur de la configuration, le plus tôt possible dans votre demande de cycle de vie (avant d'avoir créé une instance unique de votre contexte).
"Création initiale" n'est PAS créé automatiquement! Vous devez créer vous-même. Quelques tutoriels de EF sont confus et j'ai eu la même incompréhension que vous.
Ce que vous devez faire:
Si vous avez déjà créé vos tables de base de données et modèle de domaine, puis:
À partir de ce point, votre code sera en synchronisation avec la base de données. Lorsque vous changez le code, vous pouvez utiliser les Add-Migration pour ajouter les modifications apportées à votre base de données.
L'article /tutoriel ici ici (sur microsoft.com)
explique la raison pour laquelle une initialCreate la migration n'existe pas. La migration ne sera ajouté si la Base de données existe déjà. Sinon, la première migration sera le initialCreate " comme il n'y a pas de point dans la création d'une migration vers une Base de données qui n'existe pas encore... pas de DB signifie il n'y a rien à restaurer, sur un bas de migration.
Ici est le paragraphe:
Pas sûr que c'est la même chose mais j'ai eu un problème similaire. Je pense que mon problème était lié au fait que je n'utilise pas une connexions de la chaîne à partir du fichier de configuration pour obtenir ma chaîne de connexion.
De jongler avec le projet de démarrage dans la solution et également le projet de liste déroulante dans le Gestionnaire de paquets de la Console, j'ai été en mesure de générer la première migration.
Également faire shure vous avez une connexions de la chaîne de caractères avec le nom de votre classe dbContext de sorte que le Gestionnaire de paquets de la trouver.
Je suis en utilisant EF 6 RC1 et rencontré ce problème lorsque ni le InitialCreate ni __MigrationHistory ont été créés lors de l'exécution de Permettre les Migrations.
En fait, juste après la mise à niveau de EF 5 à EF 6 j'ai couru Permettre les Migrations et pour quelque raison il a créé un __MigrationHistory table à l'aide de l'EF 5 schéma, donc je l'ai supprimé et mon Migrations répertoire et essayé de recommencer.
Mais à chaque fois j'ai supprimé les Migrations répertoire, il ne serait pas de créer un InitialCreate ou __MigrationHistory. J'ai essayé de la suppression et recréation de la base de données et de redémarrer Visual Studio 2012 en vain. J'ai donné pour la journée et le lendemain matin, essayé à nouveau - après avoir laissé mon ordinateur reposer pendant environ 8 heures, il a ensuite créé la InitialCreate. Je devine que il doit y avoir un cache quelque part qui a un très long délai de quelqu'un? Je suis également deviner que le redémarrage peut effacer le cache, mais je n'ai pas testé.
Quel que soit le cas, il est possible d'utiliser
PM> Add-Migration InitialCreate
de faire cette étape manuellement.De toute façon, je n'ai toujours pas un __MigrationHistory table. Apparemment, EF 6 a changé depuis sa création au cours de l'Activer-Migrations de commande au lieu de seulement le créer lors de la mise à Jour de la Base de données de commande. Et depuis mon schéma a déjà été créé à ce moment, j'avais besoin de le démolir et de le recréer manuellement:
J'ai aussi arrêté après la première commande pour vérifier l'état de la base de données pour s'assurer que je a été mise à jour le bon, depuis selon cette, la base de données de la chaîne de connexion est ramassé ou générés automatiquement selon la configuration, et à moins que la configuration est bonne, il n'y a aucune garantie que vous allez accéder à la base de données ou à une instance de SQL Server que vous avez l'intention d'.
Après l'exécution de deux commandes, il a créé un __MigrationHistory de la table et il n'a pas créer un système de table (que je n'ai pas vraiment envie de toute façon), donc tout est bon. Pas exactement le même problème que l'OP, mais j'espère que ce sera utile à quelqu'un d'autre.
Références:
Je sais que c'est vieux, mais il n'existe pas de réponse et j'ai eu le même problème.
Le truc, c'est de Permettre les Migrations de commande. Comme l'a déclaré ici il existe une commande Enable-Migrations –EnableAutomaticMigrations. Ce qu'il fait, il commence migrations exactement où vous êtes.
Si vous voulez de la première migration à la création de base de données, il suffit d'exécuter Permettre les Migrations (sans --EnableAutomaticMigrations).
Et n'oubliez pas de régler l'initialiseur: