Comment mettre à jour correctement un modèle d'entité après des modifications de la structure de la base de données?

entity-framework entity-model

Question

J'ai apporté des modifications à la structure des tables et en particulier aux relations entre les tables de ma base de données SQL Server. Maintenant, je veux mettre à jour mon modèle Entity basé sur cette nouvelle structure de base de données.

En cliquant avec le bouton droit sur le fichier edmx, je trouve l'option "Mettre à jour le modèle à partir de la base de données". Mais lorsque je fais cela, je reçois une sorte de mise à jour de 50%: les nouvelles colonnes apparaissent dans les classes d'entité, mais je suis confus à propos d'un grand nombre de propriétés de navigation qui sont toujours présentes dans le modèle, bien que les relations de clé étrangère correspondantes n'existent plus dans la base de données. ( Édition: les membres des classes de modèle ne sont pas non plus supprimés, bien que les colonnes de la base de données aient été supprimées.)

Est-ce que je fais quelque chose de mal? Ou existe-t-il une autre option pour mettre à jour le modèle, y compris la suppression des propriétés de navigation? Ou dois-je supprimer ces propriétés de navigation manuellement dans les fichiers de modèle?

J'utilise Entity Framework version 1 (VS 2008 SP1).

Merci d'avance pour votre aide!

Réponse acceptée

Vous faites la bonne chose pour mettre à jour. Cependant, après avoir généré automatiquement un modèle, vous pouvez le personnaliser. Lors de la mise à jour, le concepteur EF souhaite essayer de conserver toutes les personnalisations que vous avez éventuellement effectuées. Il faut deviner à ce sujet, et ce n'est pas toujours correct. Je vais essayer d’expliquer comment il suppose, car cela pourrait vous aider.

Votre EDMX comprend trois parties:

  • Schéma client (CSDL)
  • Schéma de stockage (SSDL)
  • Mappage entre le client et le magasin (MSL)

Le concepteur "possède" le schéma de magasin. Il régénérera ce presque à partir de zéro chaque fois que vous mettez à jour. Bien qu'il soit possible de personnaliser le schéma de magasin en modifiant manuellement le fichier SSDL, vous perdez souvent ces modifications lorsque vous mettez à jour votre modèle.

Par contre, vous "possédez" le schéma du client. Le concepteur générera le schéma client pour vous lors de sa première exécution et générera le schéma client pour les objets de métadonnées de base de données nouvellement importés, tels que les tables ou les colonnes nouvellement mappées. Toutefois, une fois que le schéma client a été généré pour un objet, il ne sera généralement pas régénéré, car le concepteur tente de conserver vos personnalisations. Par conséquent, si vous modifiez votre base de données de manière à affecter le schéma du client, vous devez mettre à jour le schéma du client manuellement. Vous pouvez le faire dans le concepteur d'interface graphique ou manuellement dans le fichier XML.

Dans votre cas, la chose la plus simple à faire serait probablement de simplement sélectionner la navigation dans le concepteur d’interface graphique et de la supprimer. Cela suppose qu'il n'y a plus de propriété d'ID pour la navigation dans la base de données, de part et d'autre de la relation.


Réponse populaire

Si vous travaillez avec un modèle d'entité qui n'a pas été personnalisé et que vous devez simplement importer les modifications de votre base de données SQL dans votre projet VS, il est plus facile de supprimer le modèle d'entité et de le régénérer à partir de la même source. Ainsi, les trois parties de votre EDMX refléteront ce qui se trouve dans votre base de données. J'ai déjà utilisé l'option "Mettre à jour le modèle à partir d'une base de données" avant de modifier le concepteur XML et de constater que le travail était fastidieux et fastidieux pour les bases de données volumineuses. Ne vous méprenez pas, cela fonctionne à 100%, mais il est tellement plus rapide de garder votre modèle frais en le recréant. Même si vous devez éditer quelques requêtes LINQ-to-SQL par la suite, je trouve qu'il est préférable de modifier les requêtes LINQ-to-SQL par rapport aux modèles EDMX. Cela dit, je n'ai pas encore eu à le faire. IMPORTANT: assurez-vous de recréer votre modèle avec les mêmes paramètres qu'auparavant. Par exemple, si vous l'avez créé sans pluraliser les noms d'objet auparavant, procédez de la même manière.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow