Meilleur moyen de mettre à jour les classes LINQ to SQL après une modification du schéma de base de données

StackOverflow https://stackoverflow.com/questions/40022

  •  09-06-2019
  •  | 
  •  

Question

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

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 ?

Était-ce utile?

La solution

Vous pouvez utiliser SQLMetal.exe pour générer votre fichier dbml et/ou cs/vb.Utilisez un script de pré-construction pour le démarrer et ciblez le répertoire auquel appartient 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>

Autres conseils

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

Huagati DBML / EDMX Tools est un complément pour Visual Studio qui ajoute des fonctionnalités au concepteur de diagrammes LINQ2SQL / DBML dans Visual Studio 2008, et au concepteur de fraterre entité ADO.NET dans Visual Studio 2008 SP1.Le complément ajoute de nouvelles options de menu pour mettre à jour les diagrammes de concepteurs LINQ2SQL avec modifications de la base de données, pour renommer les classes et les propriétés LINQ-SQL (DBML) et EF (EDMX) pour utiliser les conventions de dénomination .NET, et pour ajouter de la documentation / description à Linq -To-SQL Généré des classes à partir des propriétés de la base de données.

Screenshot of DBML Tools

Voici une solution simple, sans aucun logiciel supplémentaire, qui ne fonctionne que pour des modifications simples (comme des champs ajoutés, quelques tableaux, etc.).

Instructions:

  • Vous extrayez une copie de la table modifiée dans le concepteur (elle sera supprimée plus tard)
  • Sélectionnez maintenant tous les champs nouveaux (ou modifiés) et (right-click ->) copy
  • Dans votre tableau d'origine, faites un clic droit et insert eux (supprimez d'abord les champs modifiés)
  • Supprimez maintenant la table à partir de laquelle vous les avez copiés

Je sais que c'est un peu évident, mais d'une certaine manière non intuitif, et cela m'a beaucoup aidé, car tous les bons attributs et types seront copiés et tous les liens resteront intacts.J'espère que cela aide.

Quand utiliser:

Bien sûr, c'est - comme dit - pour de petits changements, mais sûrement mieux que de remplacer manuellement les tables avec de nombreux liens, ou lorsque 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 disposez d'un grand nombre de tables (par ex.SAP), ou lors de l'utilisation de tables réticulées provenant de différentes bases de données.

DamienG a écrit quelques modèles t4 qui peut remplacer une partie de ce que 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é pour le contenu de votre cœur.

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

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

J'ai écrit un outil pour apporter des modifications aux scripts Dbml, voir http://code.google.com/p/linqtodbmlrunner/ et mon blog http://www.adverseconditionals.com

Que diriez-vous de modifier les propriétés de l'entité/table dans l'aire de conception DataContext dans Visual Studio ?

Par exemple, si j'ajoute une colonne à une table SQL Server :

  1. Ouvrez le fichier *.dbml.
  2. Cliquez avec le bouton droit sur l'entité et sélectionnez Ajouter > Propriété.
  3. Remplissez les valeurs dans la fenêtre Propriétés pour la nouvelle colonne.
  4. Construisez votre solution.

Les classes de modèles générées automatiquement doivent refléter la nouvelle colonne ajoutée.

enter image description here

enter image description here

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