Question

Je teste avec EF 4.3 (bêta)

J'ai de nouvelles classes qui devraient générer des tables et des colonnes DB.

À partir d'un ancien projet, j'ai de vieilles tables dans mon schéma, auxquelles je veux accéder via EF. Toutes les classes sont déclarées. Pour accéder à l'ancienne table, il y a un POCO qui est cartographié.

Les migrations DB essaient également de créer cette ancienne table.

Comment peut-il définir que cette classe / table ne fait pas partie de la migration, mais une partie du modèle EF?

xxx.OnModelCreating()    
{
    modelBuilder.Ignore<myOldTableClass>();    
}

Supprime toute la classe du modèle. Enfin, je ne peux pas l'utiliser pour accéder via DBContext.

J'aime utiliser des migrations automatiques. J'essaie d'éviter de migrer complètement les vieilles tables DB vers les classes EF. (Oui, je sais qu'il y a des générateurs pour cela) Il y a 120 tables, qui sont toujours utilisées par une ancienne application.

Quelques nouvelles tables qui ne sont utilisées qu'avec EF (nouvelle application). Il y a 3 tables d'occasion courantes. Ceux-ci ne doivent pas être créés mais accessibles via EF.

Était-ce utile?

La solution

Avec EF 4.3.1 Sorti, il y a une prise en charge de ce scénario. Lors de l'ajout de classes mappées aux tables existantes dans la base de données, utilisez le -IgnoreChanges basculer vers Add-Migration.

Cela générera une migration vide, avec une signature de méta-données mise à jour qui contient les classes nouvellement ajoutées.

Habituellement, cela se fait lorsque vous commencez à utiliser les migrations EF, d'où le nom "InitialMigration":

Add-Migration InitialMigration –IgnoreChanges

Autres conseils

Le flux de travail correct dans ce cas consiste à créer la première migration avant d'ajouter des modifications (nouvelles classes), que l'ajout de nouvelles classes et après cela, la création de nouvelles migrations où vous n'aurez que de nouvelles tables.

Si vous n'avez pas utilisé de migrations jusqu'à présent, le cadre générera des migrations pour toutes les tables que vous avez dans le projet, car elle pense que vous créez une migration initiale. Une fois la migration générée, vous pouvez modifier son fichier source et supprimer CreateTable code pour les anciennes classes de Up méthode. Le problème est que vous devrez probablement le faire dans toute migration ultérieure.

Éditer: J'ai écrit un procédure pas à pas pour ajouter des migrations vers le projet existant avec EF 4.3.1

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top