SqlMetal.exe (コード生成ツール)

SqlMetal コマンドライン ツールは、.NET Framework の LINQ to SQL コンポーネント用のコードとマッピングを生成します。 このトピックで後述するオプションを適用することにより、次のようなアクションを SqlMetal で実行できます。

  • データベースから、ソース コードとマッピング属性またはマッピング ファイルを生成する。

  • データベースから、カスタマイズ用の中間的なデータベース マークアップ言語 (.dbml) ファイルを生成する。

  • .dbml ファイルから、コードとマッピング属性またはマッピング ファイルを生成する。

このツールは、Visual Studio 2019 およびそれ以前のバージョンで自動的にインストールされます。 既定では、このファイルは %ProgramFiles%\Microsoft SDKs\Windows[version]\bin にあります。 Visual Studio をインストールしない場合、Windows SDK のダウンロードにより SQLMetal ファイルを入手することもできます。

Note

Visual Studio を使用する開発者は、オブジェクト リレーショナル デザイナーを使用してエンティティ クラスを生成することもできます。 コマンド ライン方式は、大きなデータベースにも適切に対応できます。 SqlMetal はコマンド ライン ツールであるため、ビルド プロセスでこれを使用できます。

ツールを実行するには、、Visual Studio 開発者コマンド プロンプトまたは Visual Studio Developer PowerShell を使用します。 コマンド プロンプトで、次のコマンドを入力します:

sqlmetal [options] [<input file>]  

Options

最新のオプションの一覧を確認するには、コマンド プロンプトでインストール場所に移動し、「 sqlmetal /? 」と入力します。

接続オプション

オプション 説明
/server:<名前> データベース サーバーの名前を指定します。
/database:<名前> サーバー上のデータベース カタログを指定します。
/user:<名前> ログオン ユーザー ID を指定します。既定値:Windows 認証の使用。
/password:<パスワード> ログオン パスワードを指定します。 既定値:Windows 認証の使用。
/conn:<接続文字列> データベース接続文字列を指定します。 /server/database/user、または /password オプションと共に使用することはできません。

接続文字列にファイル名は含めないでください。 代わりに、コマンド ラインにファイル名を入力ファイルとして追加します。 たとえば、 sqlmetal /code:"c:\northwind.cs" /language:csharp "c:\northwnd.mdf" というコマンド ラインは、入力ファイルとして "c:\northwnd.mdf" を指定します。
/timeout:<秒数> SqlMetal がデータベースにアクセスする際のタイムアウト値を指定します。 既定値:0 (時間制限なし)。

抽出オプション

オプション 説明
/views データベース ビューを抽出します。
/functions データベース関数を抽出します。
/sprocs ストアド プロシージャを抽出します。

出力オプション

オプション 説明
/dbml[:file] 出力を .dbml として送ります。 /map オプションと共に使用することはできません。
/code[:file] 出力をソース コードとして送ります。 /dbml オプションと共に使用することはできません。
/map[:file] 属性ではなく XML マッピング ファイルを生成します。 /dbml オプションと共に使用することはできません。

その他

オプション 説明
/language:<言語> ソース コードの言語を指定します。

有効な <言語>: vb、csharp。

既定値:コード ファイル名の拡張子から派生します。
/namespace:<名前> 生成されるコードの名前空間を指定します。 既定値は、名前空間なしです。
/context:<種類> データ コンテキスト クラスの名前を指定します。 既定値:データベース名から派生します。
/entitybase:<型> 生成されるコード内のエンティティ クラスの基本クラスを指定します。 既定値:エンティティの基本クラスなしです。
/pluralize クラスとメンバーの名前を自動的に複数化または単数化します。

このオプションは、米国英語バージョンでのみ使用できます。
/serialization:<オプション> シリアル化可能なクラスを生成します。

有効な <オプション>: None、Unidirectional。 既定値:なし。

詳細については、「Serialization」 (シリアル化) を参照してください。

入力ファイル

オプション 説明
<入力ファイル> SQL Server Express .mdf ファイル、SQL Server Compact 3.5 .sdf ファイル、または .dbml 中間ファイルを指定します。

Remarks

SqlMetal の実際の機能には、次の 2 つの段階が含まれています。

  • データベースのメタデータを .dbml ファイルに抽出する。

  • コード出力ファイルを生成する。

    適切なコマンド ライン オプションを使用することで、Visual Basic または C# ソース コードを生成するか、XML マッピング ファイルを生成できます。

メタデータを .mdf ファイルから抽出するには、他のすべてのオプションの後に .mdf ファイルの名前を指定する必要があります。

/server を指定しない場合、 localhost/sqlexpress と見なされます。

Microsoft SQL Server 2005 は、次の条件が少なくとも 1 つ満たされる場合に例外をスローします。

  • 自身を呼び出すストアド プロシージャを SqlMetal が抽出しようとした。

  • ストアド プロシージャ、関数、またはビューの入れ子レベルが 32 を超える。

    SqlMetal はこの例外をキャッチして、それを警告として報告します。

入力ファイル名を指定するには、その名前をコマンド ラインに入力ファイルとして追加します。 ( /conn オプションを使用して) 接続文字列にファイル名を含める操作は、サポートされていません。

使用例

抽出された SQL メタデータを格納する .dbml ファイルを生成します。

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

SQL Server Express を使用して .mdf ファイルから抽出された SQL メタデータを格納する .dbml ファイルを生成します。

sqlmetal /dbml:mymeta.dbml mydbfile.mdf

SQL Server Express から抽出された SQL メタデータを格納する .dbml ファイルを生成します。

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

Note

サンプル データベース Northwind で /pluralize オプションを使用する場合には、注意を必要とする動作があります。 SqlMetal がテーブルのために行型の名前を生成するとき、テーブル名は単数形です。 テーブルに関する DataContext プロパティを生成するときには、テーブル名は複数形です。 偶然にも、サンプル データベース Northwind 内のテーブルには既に複数形が使われています。 このため、この部分はうまく機能しません。 データベース テーブルの名前は単数形にするのが一般的ですが、.NET では、コレクションの名前を複数形にすることも一般的です。

関連項目