SqlMetal.exe (outil de génération de code)

L’outil en ligne de commande SqlMetal génère le code et le mappage pour le composant LINQ to SQL du .NET Framework. En appliquant les options qui apparaissent ultérieurement dans cette rubrique, vous pouvez ordonner à SqlMetal d'exécuter plusieurs actions différentes, dont les suivantes :

  • À partir d'une base de données, générez le code source et les attributs de mappage ou un fichier de mappage.

  • À partir d'une base de données, générez un fichier .dbml (database markup language) intermédiaire à des fins de personnalisation.

  • À partir d'un fichier .dbml, générez du code et des attributs de mappage ou un fichier de mappage.

Cet outil est automatiquement installé avec Visual Studio 2019 et les versions antérieures. Par défaut, ce fichier se trouve à l'emplacement suivant : %ProgramFiles%\Microsoft SDKs\Windows[version]\bin. Si vous n’installez pas Visual Studio, vous pouvez également obtenir le fichier SQLMetal en téléchargeant le SDK Windows.

Notes

Les développeurs qui utilisent Visual Studio peuvent également utiliser le Concepteur Objet Relationnel pour générer des classes d'entité. L'approche de ligne de commande est bien adaptée aux bases de données volumineuses. Puisque SqlMetal est un outil de ligne de commande, vous pouvez l'utiliser dans un processus de génération.

Pour exécuter l’outil, utilisez l’invite de commandes Visual Studio Developer ou PowerShell pour Visual Studio Developer. Entrez la commande suivante à l'invite de commande :

sqlmetal [options] [<input file>]  

Options

Pour afficher la liste des options la plus récente, tapez sqlmetal /? à partir d’une invite de commandes depuis l’emplacement d’installation.

Options de connexion

Option Description
/server :<nom> Spécifie le nom du serveur de base de données.
/database :<nom> Spécifie le catalogue de base de données sur le serveur.
/user :<nom> Spécifie l’ID d’utilisateur d’ouverture de session. Valeur par défaut : utilisez l’authentification Windows.
/password :<mot_de_passe> Spécifie le mot de passe d'ouverture de session. Valeur par défaut : utilisez l'authentification Windows.
/conn :<chaîne_connexion> Spécifie la chaîne de connexion de base de données. Ne peut pas être utilisée avec les options /server, /database, /userou /password .

N'inclut pas le nom de fichier dans la chaîne de connexion. Ajoutez plutôt le nom de fichier à la ligne de commande comme fichier d'entrée. Par exemple, la ligne suivante spécifie "c:\northwnd.mdf" comme fichier d’entrée : sqlmetal /code:"c:\northwind.cs" /language:csharp "c:\northwnd.mdf".
/timeout :<secondes> Spécifie la valeur du délai d'attente lorsque SqlMetal accède à la base de données. Valeur par défaut : 0 (à savoir, aucune limite de temps).

Options d’extraction

Option Description
/views Extrait des vues de base de données.
/functions Extrait des fonctions de base de données.
/sprocs Extrait des procédures stockées.

Options de sortie

Option Description
/dbml[:file] Envoie la sortie au format .dbml. Ne peut pas être utilisée avec l’option /map .
/code[:file] Envoie la sortie sous la forme de code source. Ne peut pas être utilisée avec l’option /dbml .
/map[:file] Génère un fichier de mappage XML plutôt que des attributs. Ne peut pas être utilisée avec l’option /dbml .

Divers

Option Description
/language :<langage> Spécifie le langage du code source.

<langage> valide : vb, csharp.

Valeur par défaut : Dérivé de l’extension du nom du fichier de code.
/namespace :<nom> Spécifie l'espace de noms du code généré. Valeur par défaut : Aucun espace de noms.
/context :<type> Spécifie le nom de la classe du contexte de données. Valeur par défaut : Dérivé du nom de la base de données.
/entitybase :<type> Spécifie la classe de base des classes d'entité du code généré. Valeur par défaut : Les entités n'ont pas de classe de base.
/pluralize Pluralise ou singularise automatiquement des noms de membre et de classe.

Cette option est disponible uniquement dans la version Anglais américain.
/serialization :<option> Génère des classes sérialisables.

<option> valide : Aucun, Unidirectionnel. Valeur par défaut : Aucun.

Pour plus d’informations, consultez Sérialisation.

Fichier d'entrée

Option Description
<fichier_entrée> Spécifie un fichier SQL Server Express .mdf, un fichier SQL Server Compact 3.5 .sdf, ou un fichier intermédiaire .dbml.

Notes

La fonctionnalité SqlMetal implique en fait deux étapes :

  • Extraction des métadonnées de la base de données dans un fichier .dbml.

  • Génération d'un fichier de sortie de code.

    En utilisant les options de ligne de commande appropriées, vous pouvez produire du code source en Visual Basic ou C#, ou encore un fichier de mappage en XML.

Pour extraire les métadonnées d'un fichier .mdf, vous devez spécifier le nom du fichier .mdf après toutes les autres options.

Si /server n’est pas spécifié, localhost/sqlexpress est supposé.

Microsoft SQL Server 2005 lève une exception si au moins l’une des conditions suivantes est remplie :

  • SqlMetal essaie d'extraire une procédure stockée qui s'appelle elle-même.

  • Le niveau d'imbrication d'une procédure stockée, d'une fonction, ou d'une vue dépasse 32.

    SqlMetal intercepte cette exception et la signale comme un avertissement.

Pour spécifier un nom de fichier d'entrée, ajoutez son nom à la ligne de commande comme fichier d'entrée. L’inclusion du nom de fichier dans la chaîne de connexion (avec l’option /conn ) n’est pas prise en charge.

Exemples

Générez un fichier .dbml qui inclut des métadonnées SQL extraites :

sqlmetal /server:myserver /database:northwind /dbml:mymeta.dbml

Générez un fichier .dbml qui inclut des métadonnées SQL extraites d'un fichier .mdf à l'aide de SQL Server Express :

sqlmetal /dbml:mymeta.dbml mydbfile.mdf

Générez un fichier .dbml qui inclut des métadonnées SQL extraites de SQL Server Express :

sqlmetal /server:.\sqlexpress /dbml:mymeta.dbml /database:northwind

Générez du code source à partir d'un fichier de métadonnées .dbml :

sqlmetal /namespace:nwind /code:nwind.cs /language:csharp mymetal.dbml

Générez le code source directement à partir de métadonnées SQL :

sqlmetal /server:myserver /database:northwind /namespace:nwind /code:nwind.cs /language:csharp

Notes

Quand vous utilisez l’option /pluralize avec l’exemple de base de données Northwind, notez le comportement suivant. Lorsque SqlMetal génère des noms de types de lignes pour des tables, les noms de table sont au singulier. Lorsqu'il génère des propriétés DataContext pour des tables, les noms de table sont au pluriel. Par coïncidence, les tables de l'exemple de base de données Northwind sont déjà au pluriel. Par conséquent, vous ne pourrez pas voir cette partie active. Bien qu’il soit courant de nommer des tables de base de données au pluriel, il est également courant dans .NET de nommer des collections au pluriel.

Voir aussi