8
votes

Quelle est la meilleure pratique lorsque le schéma de base de données change dans le cadre d'entité?

J'utilise le cadre d'entité pour faire le projet ORM dans .NET. Le problème que je suis confronté est que lorsque le schéma de base de données change, il n'y a pas de mécanisme approprié pour mettre à jour le fichier EDMX.

Par exemple, s'il y a une colonne appelée "salaire", et je le change à "Emppsalary", puis lorsque je mettez à jour l'EDMX de Visual Studio et cela me montre deux colonnes dans la classe - Salaire et Emmsalary.

Une façon dont j'ai trouvé est de supprimer tout le fichier EDMX et de le régénérer. Mais alors si je suis renommé manuellement les propriétés de navigation dans le modèle? Je vais les perdre et je dois les recréer qui est une chose douloureuse à faire à chaque fois.

Toutes les meilleures pratiques dans cette zone?

merci


2 commentaires

Je viens de moi ce matin. J'étais légèrement en colère contre mon collègue. Je ne sais pas que c'est la meilleure pratique, je n'ai rien aidé beaucoup.


@ashraf, Nope. Je suppose que ef 3.5 qui vient groupé avec vs2008 SP1


3 Réponses :


4
votes

L'approche que j'ai utilisée avec LINQ vers SQL (qui a le même numéro) est de scripter mon manuel modifier le fichier XML afin que je puisse les réappliquer après la ré-exécution du processus de génération. Vous pouvez générer une bibliothèque de classe pour modifier le fichier EDMX à l'aide de LINQ vers XSD. Voir http: //www.adversecondaltions .COM / 2008/05 / SCRIPTING-CHANGEMENTS-LINQ-TO-SQL-DBML.HTML Pour un peu plus de détails


0 commentaires

2
votes

Dans le concepteur EF1, la fonction "Mettre à jour le modèle de base de données" est cassée pour beaucoup de situations. Je travaille avec EF1 depuis environ un an maintenant. Les problèmes utilisant le concepteur EF1 m'ont coûté des jours de temps de même que je suis en ce qui concerne la meilleure pratique consiste à éditer manuellement l'EDMX XML vous-même.

Pour des trucs difficiles, créez un nouveau modèle contenant les nouvelles tables / colonnes / relations / vues que vous souhaitez, puis copiez-coller le XML de la nouvelle EDMX dans votre XML existant.

Certaines choses qu'il brise lorsque vous utilisez "Mettre à jour le modèle de base de données"

  1. écrase tout changement manuel vous faire au XML.
  2. ne peut pas faire face aux valeurs par défaut dans La base de données - insiste sur vos entités fournir des valeurs pour les champs qui sont peuplé par valeur par défaut.
  3. génère des clés composées ridicres pour les vues et même si vous avez corrigé la vue d'avoir des clés sensibles, il commémère votre correct version et crée une nouvelle version en utilisant ses propres clés étranges!
  4. ne définit pas tous les attributs pour colonnes ajoutées aux tables qu'il définit Lorsque vous créez la table de gratter (par exemple, unicode, maxlength, Longueur fixe)

    Je suis sûr qu'il y en a plus, mais cela me suffisait pour arrêter de l'utiliser.


0 commentaires

2
votes

J'ai quelques jolis grands modèles que je aide à mettre à jour et que la chose la plus importante que j'ai remarquée sur la commande "Modèle de mise à jour de l'assistant" dans EF V1 est qu'il ne supprime rien de la CSDL. Le SSDL pourrait être correct à 100% (et est dans la plupart des cas). Donc, il y a deux façons de gérer cela.

1) Modifier / script Les modifications XML. 2) rendre les modifications manuellement dans le concepteur.

J'ai essayé très fort d'obtenir la méthode 1 pour fonctionner. Ce n'est pas facile, mais le meilleur indice que je peux vous donner est de comparer la SSDL à la version CSDL et vous obtenez très près (si vous ne parlez que de colonnes).

La pire partie est lorsque vous renommez une table. Ensuite, chaque relation FK qui a été construite sur cette table dans la CSDL est essentiellement dupliquée (car une renommée est vraiment une suppression / création, mais rappelez-vous que l'assistant ne supprime rien dans la CSDL: -))

Alors, la pointe la plus facile que j'ai. Faites vos modifications de l'assistant de mise à jour. Ensuite, compilez uniquement le projet .EDMX (en maintenant le concepteur ouvert). Après cela est fait, double-cliquez simplement sur chaque message d'erreur et "résoudre l'erreur".

Résolution de l'erreur dépend du scénario. Si ce sont des colonnes dupliquées, cliquez avec le bouton droit de la souris sur le nom de la colonne Bad et cliquez sur Supprimer. Si c'est un mauvais FK, cliquez avec le bouton droit de la souris sur cela et supprimez-le.

Je me souviens de quelqu'un sur CodePlex Attimant pour effectuer l'assistant de mise à jour avec des modèles T4 (ce qu'ils utilisent avec .NET V4 maintenant). Je pense juste que c'est beaucoup plus délicieux qu'il n'y paraît. J'avais tenté de le faire, et quand je suis arrivé à des scénarios tels que 1 .. * * .. 1 Multiplicité Le XML et le code dans le générateur T4 ont été vraiment effrayants. Donc, au lieu de cela, nous venons de recourir à «résoudre la méthode des erreurs».


0 commentaires