チュートリアル : DBML ファイルからの F# 型の生成 (F#)
F# 3.0 に関するこのチュートリアルでは、.dbml ファイルにエンコードされているスキーマ情報がある場合に、データベースからデータの型を作成する方法について説明します。 LINQ to SQL はこのファイル形式を使用してデータベース スキーマを表します。 オブジェクト リレーショナル (O/R) デザイナーを使用して、Visual Studio で LINQ to SQL スキーマ ファイルを生成できます。 詳細については、「O/R デザイナーの概要」および「LINQ to SQL でのコード生成」を参照してください。
データベース マークアップ言語 (DBML) 型プロバイダーを使用すると、データベース スキーマに基づく型を使用するコードを記述できます。コンパイル時に静的接続文字列を指定する必要はありません。 これは、アプリケーション開発に使用したものと異なるデータベース、資格情報、または接続文字列を最終的なアプリケーションが使用する可能性を残しておく必要がある場合に便利です。 コンパイル時に使用できる直接データベース接続があり、それが、ビルド済みアプリケーションで最終的に使用するデータベースおよび資格情報と同じである場合、SQLDataConnection 型プロバイダーも使用できます。 詳細については、「チュートリアル : 型プロバイダーを使用した SQL データベースへのアクセス (F#)」を参照してください。
このチュートリアルでは、次の作業について説明します。 このチュートリアルを正しく行うには、以下の作業を順に行ってください。
Creating a .dbml file
Creating and setting up an F# project
Configuring the type provider and generating the types
Querying the database
.dbml ファイルの作成
テストするデータベースがない場合は、「チュートリアル : 型プロバイダーを使用した SQL データベースへのアクセス (F#)」の最後の手順に従い、データベースを作成します。 これらの手順に従うと、いくつかの簡単なテーブルとストアド プロシージャを含む MyDatabase という名前のデータベースが SQL Server に作成されます。
既に .dbml ファイルがある場合、セクション「Create and Set Up an F# Project」に進むことができます。 それ以外の場合、既存の SQL データベースがある場合は SqlMetal.exe コマンド ライン ツールを使用して .dbml ファイルを作成できます。
SqlMetal.exe を使用して .dbml ファイルを作成するには
開発者コマンド プロンプトを開きます。
コマンド プロンプトで「SqlMetal.exe /?」と入力して、SqlMetal.exe にアクセスできることを確認します。 通常、SqlMetal.exe は Program Files または Program Files (x86) の下の Microsoft SDKs フォルダーにインストールされます。
次のコマンド ライン オプションを使用して SqlMetal.exe を実行します。 c:\destpath を適切なパスに置き換えて、.dbml ファイルを作成し、データベース サーバー、インスタンス名、およびデータベース名の適切な値を挿入します。
SqlMetal.exe /sprocs /dbml:C:\destpath\MyDatabase.dbml /server:SERVER\INSTANCE /database:MyDatabase
注意
アクセス許可の問題により SqlMetal.exe でファイルを作成できない場合は、現在のディレクトリを書き込みアクセス権のあるフォルダーに変更します。
他の使用できるコマンド ライン オプションを確認することもできます。 たとえば、生成された型に含まれるビューと SQL 関数が必要な場合に使用できるオプションがあります。 詳細については、「SqlMetal.exe (コード生成ツール)」を参照してください。
F# プロジェクトの作成と設定
この手順では、プロジェクトを作成し、DBML 型プロバイダーを使用するために適切な参照を追加します。
F# プロジェクトを作成してセットアップするには
新しい F# コンソール アプリケーション プロジェクトをソリューションに追加します。
ソリューション エクスプローラーで、[参照] のショートカット メニューを開き、[参照の追加] をクリックします。
[アセンブリ] 領域で、[フレームワーク] ノードを選択し、使用できるアセンブリの一覧から、System.Data アセンブリと System.Data.Linq アセンブリを選択します。
[アセンブリ] 領域で、[拡張機能] を選択し、使用できるアセンブリの一覧から、FSharp.Data.TypeProviders を選択します。
[OK] をクリックして、プロジェクトにこれらのアセンブリへの参照を追加します。
(省略可能) 前の手順で作成した .dbml ファイルをコピーし、プロジェクトのメイン フォルダーにそのファイルを貼り付けます。 このフォルダーには、プロジェクト ファイル (.fsproj) およびコード ファイルが含まれています。 メニュー バーで、[プロジェクト]、[既存項目の追加] の順にクリックし、.dbml ファイルを指定してプロジェクトに追加します。 これらの手順が完了すると、次の手順の ResolutionFolder 静的パラメーターを省略できます。
型プロバイダーの構成
このセクションでは、型プロバイダーを作成し、.dbml ファイルに記述されているスキーマから型を生成します。
型プロバイダーを構成して型を生成するには
TypeProviders 名前空間を開き、使用する .dbml ファイルの型プロバイダーをインスタンス化するコードを追加します。 プロジェクトに .dbml ファイルを追加した場合は、ResolutionFolder 静的パラメーターを省略できます。
open Microsoft.FSharp.Data.TypeProviders type dbml = DbmlFile<"MyDatabase.dbml", ResolutionFolder = @"<path to folder that contains .dbml file>> // This connection string can be specified at run time. let connectionString = "Data Source=MYSERVER\INSTANCE;Initial Catalog=MyDatabase;Integrated Security=SSPI;" let dataContext = new dbml.Mydatabase(connectionString)
DataContext 型は、生成されるすべての型へのアクセスを提供し、DataContext から継承します。 DbmlFile 型プロバイダーには、設定できるさまざまな静的パラメーターがあります。 たとえば、DataContext=MyDataContext を指定すると、DataContext 型に別の名前を使用できます。 この場合、コードは次のようになります。
open Microsoft.FSharp.Data.TypeProviders type dbml = DbmlFile<"MyDatabase.dbml", ContextTypeName = "MyDataContext"> // This connection string can be specified at run time. let connectionString = "Data Source=MYSERVER\INSTANCE;Initial Catalog=MyDatabase;Integrated Security=SSPI;" let db = new dbml.MyDataContext(connectionString)
データベースの照会
このセクションでは、F# クエリ式を使用してデータベースを照会します。
データを照会するには
データベースを照会するコードを追加します。
query { for row in db.Table1 do where (row.TestData1 > 2) select row } |> Seq.iter (fun row -> printfn "%d %s" row.TestData1 row.Name)
次の手順
他のクエリ式を使用する手順に進むことも、データベース接続をデータ コンテキストから取得して通常の ADO.NET データ操作を実行することもできます。 追加の手順については、「チュートリアル : 型プロバイダーを使用した SQL データベースへのアクセス (F#)」の「データの照会」の後のセクションを参照してください。
参照
処理手順
チュートリアル : 型プロバイダーを使用した SQL データベースへのアクセス (F#)