チュートリアル : DBML ファイルからの F# 型の生成 (F#)

F# 3.0 に関するこのチュートリアルでは、.dbml ファイルにエンコードされているスキーマ情報がある場合に、データベースからデータの型を作成する方法について説明します。LINQ to SQL はこのファイル形式を使用してデータベース スキーマを表します。オブジェクト リレーショナル (O/R) デザイナーを使用して、Visual Studio で LINQ to SQL スキーマ ファイルを生成できます。詳細については、「O/R Designer Overview」および「Code Generation in 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 ファイルを作成するには

  1. 開発者コマンド プロンプトを開きます。

  2. コマンド プロンプトで「SqlMetal.exe /?」と入力して、SqlMetal.exe にアクセスできることを確認します。通常、SqlMetal.exe は Program Files または Program Files (x86) の下の Microsoft SDKs フォルダーにインストールされます。

  3. 次のコマンド ライン オプションを使用して SqlMetal.exe を実行します。c:\destpath を適切なパスに置き換えて、.dbml ファイルを作成し、データベース サーバー、インスタンス名、およびデータベース名の適切な値を挿入します。

    SqlMetal.exe /sprocs /dbml:C:\destpath\MyDatabase.dbml /server:SERVER\INSTANCE /database:MyDatabase
    

    [!メモ]

    アクセス許可の問題により SqlMetal.exe でファイルを作成できない場合は、現在のディレクトリを書き込みアクセス権のあるフォルダーに変更します。

  4. 他の使用できるコマンド ライン オプションを確認することもできます。たとえば、生成された型に含まれるビューと SQL 関数が必要な場合に使用できるオプションがあります。詳細については、「SqlMetal.exe (コード生成ツール)」を参照してください。

F# プロジェクトの作成と設定

この手順では、プロジェクトを作成し、DBML 型プロバイダーを使用するために適切な参照を追加します。

F# プロジェクトを作成してセットアップするには

  1. 新しい F# コンソール アプリケーション プロジェクトをソリューションに追加します。

  2. ソリューション エクスプローラーで、[参照] のショートカット メニューを開き、[参照の追加] をクリックします。

  3. [アセンブリ] 領域で、[フレームワーク] ノードを選択し、使用できるアセンブリの一覧から、System.Data アセンブリと System.Data.Linq アセンブリを選択します。

  4. [アセンブリ] 領域で、[拡張機能] を選択し、使用できるアセンブリの一覧から、FSharp.Data.TypeProviders を選択します。

  5. [OK] をクリックして、プロジェクトにこれらのアセンブリへの参照を追加します。

  6. (省略可能) 前の手順で作成した .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#)

関連項目

DbmlFile 型プロバイダー (F#)

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

クエリ式 (F#)

その他の技術情報

型プロバイダー