SqlMetal.exe (Tool zur Codegenerierung)
Das Befehlszeilentool „SqlMetal“ generiert Code und Zuordnungen für die Komponente „LINQ to SQL“ von .NET Framework. Durch Anwenden der später in diesem Thema behandelten Optionen können Sie SqlMetal anweisen, mehrere verschiedene Aktionen wie etwa die folgenden auszuführen:
Generieren von Quellcode und Zuordnungsattributen oder einer Zuordnungsdatei von einer Datenbank aus
Generieren einer DBML-Datei (Intermediate Database Markup Language) zum Anpassen von einer Datenbank aus
Generieren von Code und Zuordnungsattributen oder einer Zuordnungsdatei von einer DBML-Datei aus
Dieses Tool wird automatisch mit Visual Studio 2019 und älteren Versionen installiert. Standardmäßig befindet sich die Datei unter %ProgramFiles%\Microsoft SDKs\Windows[Version]\bin. Wenn Sie Visual Studio nicht installieren, können Sie die SQLMetal-Datei auch erhalten, indem Sie das Windows SDK herunterladen.
Hinweis
Entwickler, die Visual Studio verwenden, können auch den objektrelationalen Designer verwenden, um Entitätsklassen zu generieren. Die Befehlszeilenmethode ist für umfangreiche Datenbanken gut skalierbar. Da SqlMetal ein Befehlszeilentool ist, können Sie es in einem Buildprozess verwenden.
Um das Tool auszuführen, verwenden Sie die Developer-Eingabeaufforderung von Visual Studio oder Visual Studio Developer PowerShell. Geben Sie an der Eingabeaufforderung den folgenden Befehl ein:
sqlmetal [options] [<input file>]
Tastatur
Geben Sie zum Anzeigen der aktuellsten Optionsliste sqlmetal /?
in einer Eingabeaufforderung am installierten Speicherort ein.
Verbindungsoptionen
Option | Beschreibung |
---|---|
/server: <Name> | Gibt den Datenbank-Servernamen an. |
/database: <Name> | Gibt den Datenbankkatalog auf dem Server an. |
/user: <name> | Gibt die Benutzer-ID für die Anmeldung an. Standardwert: Verwenden der Windows-Authentifizierung. |
/password: <Kennwort> | Gibt das Anmeldekennwort an. Standardwert: Verwenden der Windows-Authentifizierung. |
/conn: <Verbindungszeichenfolge> | Gibt die Verbindungszeichenfolge für Datenbanken an. Kann nicht mit den Optionen /server, /database, /useroder /password verwendet werden. Die Verbindungszeichenfolge darf den Dateinamen nicht enthalten. Fügen Sie stattdessen den Dateinamen in der Befehlszeile als Eingabedatei hinzu. In der folgenden Zeile ist beispielsweise „c:\northwnd.mdf“ als Eingabedatei angegeben: sqlmetal /code:"c:\northwind.cs" /language:csharp "c:\northwnd.mdf" . |
/timeout: <Sekunden> | Gibt den Timeoutwert an, wenn SqlMetal auf die Datenbank zugreift. Standardwert: 0 (d. h. kein Zeitlimit). |
Extraktionsoptionen
Option | BESCHREIBUNG |
---|---|
/views | Extrahiert Datenbankansichten. |
/functions | Extrahiert Datenbankfunktionen. |
/sprocs | Extrahiert gespeicherte Prozeduren. |
Ausgabeoptionen
Option | Beschreibung |
---|---|
/dbml [:file] | Sendet die Ausgabe als DBML-Datei. Kann nicht zusammen mit der Option /map verwendet werden. |
/code [:file] | Sendet die Ausgabe als Quellcode. Kann nicht zusammen mit der Option /dbml verwendet werden. |
/map [:file] | Generiert anstelle von Attributen eine XML-Zuordnungsdatei. Kann nicht zusammen mit der Option /dbml verwendet werden. |
Verschiedenes
Option | Beschreibung |
---|---|
/language: <Sprache> | Gibt die Quellcodesprache an. Gültige Werte für <Sprache>: vb, csharp Standardwert: von der Erweiterung des Namens der Codedatei abgeleitet. |
/namespace: <Name> | Gibt den Namespace des generierten Codes an. Standardwert: kein Namespace. |
/context: <Typ> | Gibt Namen der Datenkontextklasse an. Standardwert: vom Datenbanknamen abgeleitet. |
/entitybase: <type> | Gibt die Basisklasse der Entitätsklassen im generierten Code an. Standardwert: Entitäten verfügen über keine Basisklasse. |
/pluralize | Klassen- und Membernamen werden automatisch in Plural- oder Singularform verwendet. Diese Option ist nur in der englischen Version (US-Version) verfügbar. |
/serialisierung: <Option> | Generiert serialisierbare Klassen. Gültige Werte für <Option>: None, Unidirectional Standardwert: Keine Weitere Informationen finden Sie unter Serialization (Serialisierung). |
Eingabedatei
Option | BESCHREIBUNG |
---|---|
<Eingabedatei> | Gibt eine SQL Server Express-Datei (.mdf), eine SQL Server Compact 3.5-Datei (.sdf) oder eine Zwischendatei (.dbml) an. |
Hinweise
Die SqlMetal-Funktionalität umfasst eigentlich zwei Schritte:
Extrahieren der Datenbank-Metadaten in eine DBML-Datei
Generieren einer Codeausgabedatei
Durch Verwenden der entsprechenden Befehlszeilenoptionen können Sie Visual Basic- oder C#-Quellcode bzw. eine XML-Zuordnungsdatei erstellen.
Um die Metadaten aus einer MDF-Datei zu extrahieren, müssen Sie den Namen der MDF-Datei nach allen anderen Optionen eingeben.
Wenn /Server nicht angegeben ist, wird localhost/sqlexpress angenommen.
Microsoft SQL Server 2005 löst eine Ausnahme aus, wenn mindestens eine der folgenden Bedingungen erfüllt ist:
SqlMetal versucht, eine gespeicherte Prozedur zu extrahieren, die sich selbst aufruft.
Die Schachtelungsebene einer gespeicherten Prozedur, Funktion, oder Ansicht übersteigt 32.
SqlMetal fängt diese Ausnahme ab und gibt sie als Warnung aus.
Um einen Namen für eine Eingabedatei anzugeben, fügen Sie den Namen der Befehlszeile als Eingabedatei hinzu. Die Angabe des Dateinamens in der Verbindungszeichenfolge (mithilfe der Option /conn ) wird nicht unterstützt.
Beispiele
Generiert eine DBML-Datei, die extrahierte SQL-Metadaten umfasst:
sqlmetal /server:myserver /database:northwind /dbml:mymeta.dbml
Generiert mithilfe von SQL Server Express eine DBML-Datei, die extrahierte SQL-Metadaten aus einer MDF-Datei umfasst:
sqlmetal /dbml:mymeta.dbml mydbfile.mdf
Generiert aus SQL Server Express eine DBML-Datei, die extrahierte SQL-Metadaten umfasst:
sqlmetal /server:.\sqlexpress /dbml:mymeta.dbml /database:northwind
Generiert Quellcode aus einer DBML-Metadatendatei:
sqlmetal /namespace:nwind /code:nwind.cs /language:csharp mymetal.dbml
Generiert Quellcode direkt aus SQL-Metadaten:
sqlmetal /server:myserver /database:northwind /namespace:nwind /code:nwind.cs /language:csharp
Hinweis
Wenn Sie die Option /pluralize mit der Northwind-Beispieldatenbank verwenden, stellen Sie folgendes Verhalten fest. Wenn SqlMetal Zeilentypnamen für Tabellen erstellt, wird für Tabellennamen die Singularform verwendet. Wenn DataContext -Eigenschaften für Tabellen erstellt werden, wird für Tabellennamen die Pluralform verwendet. Zufällig treten die Tabellen in der Northwind-Beispieldatenbank bereits in Pluralform auf. Deshalb ist nicht erkennbar, dass dieser Schritt funktioniert. Obwohl es üblich ist, Datenbanktabellen im Singular zu benennen, ist es in .NET auch verbreitet, Auflistungen in Pluralform zu benennen.