Comment ignorer une table/classe EF 4.3 migrations
Je suis en essais avec EF 4.3 (bêta)
J'ai quelques nouvelles classes qui devrait générer db tables et des colonnes.
À partir d'un vieux projet que j'ai quelques vieux tableaux dans mon schéma, je veux accéder via EF.
Toutes les Classes sont déclarées. Pour accéder à la vieille table, il y a un poco qui est mappé.
La db migrations essaie de créer cette vieille table, trop.
Comment peut-on définir cette classe/table ne fait pas partie de la migration, mais une partie de ce que le modèle ef?
xxx.OnModelCreating()
{
modelBuilder.Ignore<myOldTableClass>();
}
supprime l'ensemble de la classe de modèle. enfin, je ne peux pas l'utiliser pour l'accès via dbContext.
j'aime utiliser les migrations automatiques.
j'essaie d'éviter de migrer la base de données ancienne tables complètement à EF classes. (Oui, je sais qu'il existe des générateurs pour ça)
il y a 120 tableaux, qui sont encore utilisés par un vieux applications.
quelques nouvelles tables qui sont utilisées uniquement avec EF (nouvelle application).
il y a 3 commun utilisé les tables.
ceux qui ne devrait pas créé mais accessible via ef.
OriginalL'auteur Bernd Ott | 2012-01-26
Vous devez vous connecter pour publier un commentaire.
Avec EF 4.3.1 publié il y a un support intégré pour ce scénario. Lors de l'ajout de classes qui sont mappés à des tables existantes dans la base de données, utilisez la
-IgnoreChanges
passer àAdd-Migration
.Cela va générer un vide de la migration, avec une mise à jour des méta-données de signature qui contient les nouvelles classes.
Généralement, cela se fait lors du démarrage à l'aide de EF Migrations, d'où le "InitialMigration" nom:
Je ne comprends pas à partir de cette réponse comment spécifier le nom de la classe à ignorer.
Je ne sais pas comment ce serait peut-être de travailler quand on veut juste ignorer une table spécifique (j'.e une table existante pour ignorer la migration). modelBuilder.Ignorer<myOldTableClass>(); n'a pas de sens parce que nous voulons la liaison.
J'ai un post de blog qui peut aider avec ce problème. tinyurl.com/q2hepmw
La façon dont il devrait fonctionner comme ceci: Vous devez d'abord vous assurer que vous n'avez pas de modèle changements qui doivent migrations ajoutée, et que les classes que vous souhaitez les migrations de l'ignorer. Vous exécutez ensuite
Add-Migration
avec le-IgnoreChanges
drapeau. Cela va créer une migration qui comprend les nouveaux modèles dans l'instantané, mais ne pas ajouter des étapes de migration pour eux. Le résultat est que, tant que vous ne modifiez pas ces "ignoré modèles",ils continueront à être exclus de l'avenir des migrations. C'est fondamentalement ce que vous faites dans votre blog, mais sans modifier manuellement le fichier de migration.OriginalL'auteur Anders Abel
Le bon flux de travail dans ce cas est la création de la première migration avant l'introduction de changements (nouvelles classes), que l'ajout de nouvelles classes et après que la création de nouveaux migration, où vous aurez seulement de nouvelles tables.
Si vous n'avez pas utiliser les migrations jusqu'à présent, le cadre va générer des migrations pour toutes les tables que vous avez dans le projet parce qu'il croit que vous êtes la création initiale de la migration. Une fois que vous avez la migration généré, vous pouvez modifier son fichier source et supprimer
CreateTable
code pour les anciennes classes deUp
méthode.Le problème est que vous aurez probablement à faire pour la suite de la migration.Edit: j'ai écrit un procédure pas à pas pour ajouter des migrations", un projet existant avec EF 4.3.1
Oui. C'est vrai. J'ai corrigé ma réponse.
Serait-ce de travailler avec AutomaticMigrationEnabled = true?
Oui il faut. Assurez-vous que votre base de données est à jour. Puis ajouter les classes que vous souhaitez ignorer. Ensuite, exécutez
Add-Migration
avecIgnoreChanges
pour créer un code basé sur la migration que les mises à jour des métadonnées sans créer les tables.Est-il de toute façon à atteindre ce moment de la migration manuellement? J'ai la situation suivante stackoverflow.com/questions/28815309/...
OriginalL'auteur Ladislav Mrnka