Dela via


SqlMetal.exe (kodgenereringsverktyg)

Kommandoradsverktyget SqlMetal genererar kod och mappning för LINQ till SQL-komponenten i .NET Framework. Genom att tillämpa alternativ som visas senare i det här avsnittet kan du instruera SqlMetal att utföra flera olika åtgärder som omfattar följande:

  • Generera källkods- och mappningsattribut eller en mappningsfil från en databas.

  • Generera en mellanliggande databas påläggsspråkfil (.dbml) från en databas för anpassning.

  • Generera kod- och mappningsattribut eller en mappningsfil från en .dbml-fil.

Det här verktyget installeras automatiskt med Visual Studio 2019 och tidigare versioner. Som standard finns filen på %ProgramFiles%\Microsoft SDKs\Windows[version]\bin. Om du inte installerar Visual Studio kan du också hämta SQLMetal-filen genom att ladda ned Windows SDK.

Kommentar

Utvecklare som använder Visual Studio kan också använda objektrelationsdesignern för att generera entitetsklasser. Kommandoradsmetoden skalar bra för stora databaser. Eftersom SqlMetal är ett kommandoradsverktyg kan du använda det i en byggprocess.

Om du vill köra verktyget använder du Visual Studio Developer Command Prompt eller Visual Studio Developer PowerShell. I kommandotolken anger du följande kommando:

sqlmetal [options] [<input file>]  

Alternativ

Om du vill visa den senaste alternativlistan skriver du sqlmetal /? i en kommandotolk från den installerade platsen.

Anslutningsalternativ

Alternativ Description
/server: <namn> Anger databasservernamnet.
/database: <name> Anger databaskatalogen på servern.
/user: <name> Anger inloggningsanvändar-ID. Standardvärde: Använd Windows-autentisering.
/password: <lösenord> Anger inloggningslösenord. Standardvärde: Använd Windows-autentisering.
/conn: <anslutningssträng> Anger databas anslutningssträng. Det går inte att använda alternativen /server, /database, /user eller /password .

Ta inte med filnamnet i anslutningssträng. Lägg i stället till filnamnet på kommandoraden som indatafil. Följande rad anger till exempel "c:\northwnd.mdf" som indatafil: sqlmetal /code:"c:\northwind.cs" /language:csharp "c:\northwnd.mdf".
/timeout: <sekunder> Anger tidsgränsvärdet när SqlMetal kommer åt databasen. Standardvärde: 0 (alltså ingen tidsgräns).

Extraheringsalternativ

Alternativ Description
/Visningar Extraherar databasvyer.
/Funktioner Extraherar databasfunktioner.
/sprocs Extraherar lagrade procedurer.

Alternativ för utdata

Alternativ Description
/dbml [:file] Skickar utdata som .dbml. Det går inte att använda alternativet /map .
/code [:file] Skickar utdata som källkod. Det går inte att använda alternativet /dbml .
/map [:file] Genererar en XML-mappningsfil i stället för attribut. Det går inte att använda alternativet /dbml .

Övrigt

Alternativ Description
/language: <language> Anger källkodsspråk.

Giltigt <språk>: vb, csharp.

Standardvärde: Härledd från filnamnstillägget för kodfilen.
/namespace: <name> Anger namnområdet för den genererade koden. Standardvärde: inget namnområde.
/context: <type> Anger namnet på datakontextklassen. Standardvärde: Härledd från databasnamn.
/entitybase: <typ> Anger basklassen för entitetsklasserna i den genererade koden. Standardvärde: Entiteter har ingen basklass.
/pluralisera Pluraliserar eller singulariserar automatiskt klass- och medlemsnamn.

Det här alternativet är endast tillgängligt i den amerikanska engelska versionen.
/serialisering: <alternativ> Genererar serialiserbara klasser.

Giltigt <alternativ>: Ingen, Enkelriktad. Standardvärde: Ingen.

Mer information finns i Serialisering.

Indatafil

Alternativ Description
<indatafil> Anger en SQL Server Express-.mdf fil, en SQL Server Compact 3.5 .sdf-fil eller en .dbml-mellanliggande fil.

Kommentarer

SqlMetal-funktioner omfattar faktiskt två steg:

  • Extrahera metadata för databasen till en .dbml-fil.

  • Generera en kodutdatafil.

    Genom att använda lämpliga kommandoradsalternativ kan du skapa Visual Basic- eller C#-källkoden, eller så kan du skapa en XML-mappningsfil.

Om du vill extrahera metadata från en .mdf fil måste du ange namnet på filen .mdf efter alla andra alternativ.

Om ingen /server anges antas localhost/sqlexpress .

Microsoft SQL Server 2005 utlöser ett undantag om ett eller flera av följande villkor är uppfyllda:

  • SqlMetal försöker extrahera en lagrad procedur som anropar sig själv.

  • Kapslingsnivån för en lagrad procedur, funktion eller vy överskrider 32.

    SqlMetal fångar upp det här undantaget och rapporterar det som en varning.

Om du vill ange ett indatafilnamn lägger du till namnet på kommandoraden som indatafil. Det går inte att inkludera filnamnet i anslutningssträng (med alternativet /conn).

Exempel

Generera en .dbml-fil som innehåller extraherade SQL-metadata:

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

Generera en .dbml-fil som innehåller extraherade SQL-metadata från en .mdf fil med hjälp av SQL Server Express:

sqlmetal /dbml:mymeta.dbml mydbfile.mdf

Generera en .dbml-fil som innehåller extraherade SQL-metadata från SQL Server Express:

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

Generera källkod från en .dbml-metadatafil:

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

Generera källkod från SQL-metadata direkt:

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

Kommentar

Observera följande beteende när du använder alternativet /pluralize med Northwind-exempeldatabasen. När SqlMetal skapar radtypsnamn för tabeller är tabellnamnen singular. När den skapar DataContext egenskaper för tabeller är tabellnamnen plural. Av en tillfällighet är tabellerna i Northwind-exempeldatabasen redan plural. Därför ser du inte att den delen fungerar. Även om det är vanligt att namnge databastabeller som singular, är det också vanligt i .NET att namnge samlingar plural.

Se även