75 votes

Meilleure façon de mettre à jour les classes LINQ to SQL après un changement de schéma de base de données

J'utilise des classes LINQ to SQL dans un projet où la conception de la base de données est encore un peu floue.

Existe-t-il un moyen simple de synchroniser les classes avec le schéma, ou dois-je mettre à jour manuellement les classes si la conception d'une table change ?

64voto

vzczc Points 4923

Vous pouvez utiliser SQLMetal.exe pour générer votre fichier dbml et/ou cs/vb. Utilisez un script pré-build pour le démarrer et cibler le répertoire où se trouve votre projet datacontext.

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\sqlmetal.exe 
  /server:<SERVER> 
  /database:<database> 
  /code:"path\Solution\DataContextProject\dbContext.cs" 
  /language:csharp 
  /namespace:<your namespace>

17voto

Espo Points 24318

Je ne l'ai pas essayé moi-même, mais Outils DBML/EDMX de Huagati est recommandé par d'autres personnes.

Huagati DBML/EDMX Tools est un module complémentaire pour Visual Studio qui ajoute fonctionnalité au concepteur de diagrammes Linq2SQL/DBML dans Visual Studio 2008, et au concepteur ADO.NET Entity Framework dans Visual Studio 2008 SP1. L'add-in ajoute un nouveau menu options de menu pour la mise à jour des diagrammes en fonction des modifications apportées à la base de données, pour renommer les classes et propriétés Linq-to-SQL (DBML) et EF (EDMX) afin d'utiliser les conventions de dénomination de pour utiliser les conventions de nommage .net, et pour ajouter de la documentation/descriptions aux aux classes générées par Linq-to-SQL à partir des propriétés de la base de données.

Screenshot of DBML Tools

8voto

Levit Points 760

Voici une solution facile, sans logiciel supplémentaire, qui ne fonctionne que pour les changements simples (comme l'ajout de champs, quelques tables, etc.).

Instructions :

  • Vous tirez une copie de la table modifiée dans le concepteur (elle sera supprimée plus tard).
  • Maintenant, sélectionnez tous les champs nouveaux (ou modifiés) et ( right-click -> ) copy
  • Dans votre tableau original, faites un clic droit et insert les (supprimez d'abord les champs modifiés)
  • Maintenant, supprimez la table d'où vous les avez copiés

Je sais que c'est assez évident, mais en quelque sorte non intuitif, et cela m'a beaucoup aidé, puisque tous les bons attributs et types seront copiés, et tous les liens resteront intacts. J'espère que cela vous aidera.

Quand l'utiliser :

Bien sûr, c'est - comme dit - pour de petits changements, mais c'est sûrement mieux que de remplacer manuellement des tables avec beaucoup de liens, ou quand vous ne voulez pas que toute la structure de votre base de données soit générée par SQLMetal. Par exemple, lorsque vous avez une grande quantité de tables (par exemple SAP), ou lorsque vous utilisez des tables liées entre elles à partir de différentes bases de données.

5voto

Rory Becker Points 8477

DamienG a écrit quelques Modèles t4 qui peut remplacer une partie de ce que le VS génère pour vous. Ceux-ci peuvent être réexécutés à tout moment via un outil de ligne de commande.

Les modèles T4 ont l'avantage supplémentaire d'être modifiables. Cela vous permet de modifier ce qui est généré à votre guise.

4voto

Michael Haren Points 42641

Je crois que Jeff s'est plaint de ça récemment. Une technique courante consiste à faire glisser à nouveau tous les objets dans le concepteur...

J'espère que quelqu'un d'autre pourra proposer une meilleure approche !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X