程式碼產生工具 (SqlMetal.exe)

更新:2007 年 11 月

SqlMetal 命令列工具會產生 .NET Framework 之 LINQ to SQL 元件的程式碼和對應。藉由套用本主題稍後出現的選項,您就可以指示 SqlMetal 執行數個不同的動作,包括以下各項:

  • 從資料庫產生原始程式碼和對應屬性或對應檔。

  • 從資料庫產生中繼資料庫標記語言 (.dbml) 檔用於自訂。

  • 從 .dbml 檔產生程式碼和對應屬性或對應檔。

根據預設,SQLMetal 檔案位於 drive:\Program Files\Microsoft SDKs\Windows\vn.nn\bin。

注意事項:

使用 Visual Studio 的開發人員也可以使用物件關聯式設計工具來產生實體類別。命令列方法會針對大型資料庫做適當調整。由於 SqlMetal 是命令列工具,因此您可以在建置處理序中使用它。物件關聯式設計工具 (O/R 設計工具)
物件關聯式設計工具 (O/R 設計工具)
物件關聯式設計工具 (O/R 設計工具)

sqlmetal [options] [<input file>]

選項

若要檢視最新的選項清單,請從安裝位置的命令提示字元中輸入 sqlmetal /?。

連接選項

選項

說明

/server:<name>

指定資料庫伺服器名稱。

/database:<name>

指定伺服器上的資料庫目錄。

/user:<name>

指定登入使用者識別碼。預設值:使用 Windows 驗證。

/password:<password>

指定登入密碼。預設值:使用 Windows 驗證。

/conn:<connection string>

指定資料庫連接字串。無法搭配 /server, /database/user/password 選項使用。

不要在連接字串 (Connection String) 中包含檔案名稱。而是在命令列中加入檔名來做為輸入檔案。例如,下行指定了 "c:\northwnd.mdf" 做為輸入檔案:sqlmetal /code:"c:\northwind.cs" /language:csharp "c:\northwnd.mdf"

/timeout:<seconds>

指定 SqlMetal 存取資料庫時的逾時值。預設值:0 (也就是沒有時間限制)。

擷取選項

選項

說明

/views

擷取資料庫檢視。

/functions

擷取資料庫函式。

/sprocs

擷取預存程序。

輸出選項

選項

說明

/dbml[:file]

以 .dbml 傳送輸出。無法搭配 /map 選項使用。

/code[:file]

以原始程式碼傳送輸出。無法搭配 /dbml 選項使用。

/map[:file]

產生 XML 對應檔而不是屬性。無法搭配 /dbml 選項使用。

其他

選項

說明

/language:<language>

指定原始程式碼語言。

有效的 <language>:vb、csharp。

預設值:衍生自程式碼檔案名稱的副檔名。

/namespace:<name>

指定所產生程式碼的命名空間。預設值:沒有命名空間。

/context:<type>

指定資料庫內容類別的名稱。預設值:衍生自資料庫名稱。

/entitybase:<type>

指定所產生程式碼中實體類別的基底類別。預設值:實體沒有基底類別。

/pluralize

自動複數化或單數化類別和成員名稱。

這個選項只有在「英文 (美國)」版本中提供。

/serialization:<option>

產生可序列化的類別。

有效的 <option>:無、單向。預設值:無。

如需詳細資訊,請參閱序列化 (LINQ to SQL)

輸入檔案

選項

說明

<input file>

指定 SQL Server Express .mdf 檔、SQL Server Compact 3.5 .sdf 檔或是 .dbml 中繼檔。

備註

SqlMetal 功能實際上包含兩個步驟:

  • 將資料庫的中繼資料擷取至 .dbml 檔。

  • 產生程式碼輸出檔。

    透過使用適當的命令列選項,您就能產生 Visual Basic 或 C# 原始程式碼,或是可以產生 XML 對應檔。

若要從 .mdf 檔擷取中繼資料,您必須在所有其他選項之後指定 .mdf 檔的名稱。

如果未指定 /server,則會假設為 localhost/sqlexpress

如果下列其中一個或多個條件為真,則 Microsoft SQL Server 2005 會擲回例外狀況:

  • SqlMetal 嘗試擷取呼叫本身的預存程序。

  • 預存程序、函式或檢視的巢狀層超過 32。

    SqlMetal 快取這個例外狀況並回報為警告。

若要指定輸入檔名,請在命令列中加入檔名來做為輸入檔案。不支援在連接字串中包含檔名 (使用 /conn 選項)。

範例

產生 .dbml 檔,其中包含擷取的 SQL 中繼資料:

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

產生 .dbml 檔,其中包括使用 SQL Server Express 從 .mdf 檔擷取的 SQL 中繼資料:

sqlmetal /dbml:mymeta.dbml mydbfile.mdf

產生 .dbml 檔,其中包括從 SQL Server Express 擷取的 SQL 中繼資料:

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

從 .dbml 中繼資料檔產生原始程式碼:

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

直接從 SQL 中繼資料產生原始程式碼:

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

注意事項:

當您使用 /pluralize 選項搭配 Northwind 範例資料庫時,請注意以下行為。當 SqlMetal 提供資料表的資料列型別名稱時,資料表名稱會是單數。當它為資料表提供 DataContext 屬性時,資料表名稱會是複數。碰巧的事,Northwind 範例資料庫中的資料表已經是複數。因此您不會看見該部分的運作情形。雖然一般會將資料庫資料表的名稱設為單數,在 .NET 中仍然常會把集合名稱設為複數。

請參閱

工作

HOW TO:在 Visual Basic 或 C# 中產生物件模型 (LINQ to SQL)

概念

LINQ to SQL 的程式碼產生

參考

外部對應參考 (LINQ to SQL)