チュートリアル: 単純なオブジェクト モデルとクエリ (Visual Basic)

このチュートリアルでは、複雑さを最小限に抑えた基本的なエンド ツー エンドの LINQ to SQL シナリオを提供します。 サンプル Northwind データベースの Customers テーブルをモデル化するエンティティ クラスを作成します。 次に、ロンドンにいる顧客を一覧表示する簡単なクエリを作成します。

このチュートリアルは、LINQ to SQL の概念を示すのに役立つコード指向の設計です。 通常、オブジェクト リレーショナル デザイナーを使用してオブジェクト モデルを作成します。

注

次の手順では、一部の Visual Studio ユーザー インターフェイス要素の名前や場所がコンピューターに異なる場合があります。 これらの要素は、使用している Visual Studio エディションと使用する設定によって決まります。 詳細については、「IDEのカスタマイズ」を参照してください。

このチュートリアルは、Visual Basic 開発設定を使用して作成されました。

[前提条件]

  • このチュートリアルでは、専用フォルダー ("c:\linqtest") を使用してファイルを保持します。 チュートリアルを開始する前に、このフォルダーを作成します。

  • このチュートリアルでは、Northwind サンプル データベースが必要です。 開発用コンピューターにこのデータベースがない場合は、Microsoft ダウンロード サイトからダウンロードできます。 手順については、「 サンプル データベースのダウンロード」を参照してください。 データベースをダウンロードしたら、ファイルを c:\linqtest フォルダーにコピーします。

概要

このチュートリアルは、次の 6 つの主要なタスクで構成されています。

  • Visual Studio での LINQ to SQL ソリューションの作成。

  • クラスをデータベース テーブルにマッピングします。

  • データベース列を表すクラスのプロパティを指定します。

  • Northwind データベースへの接続を指定します。

  • データベースに対して実行する単純なクエリを作成する。

  • クエリの実行と結果の監視。

LINQ to SQL ソリューションの作成

この最初のタスクでは、LINQ to SQL プロジェクトをビルドして実行するために必要な参照を含む Visual Studio ソリューションを作成します。

LINQ to SQL ソリューションを作成するには

  1. [ ファイル ] メニューの [ 新しいプロジェクト] をクリックします。

  2. [新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] ウィンドウで、[Visual Basic] をクリックします。

  3. [テンプレート] ウィンドウ で 、[ コンソール アプリケーション] をクリックします。

  4. [ 名前 ] ボックスに「 LinqConsoleApp」と入力します。

  5. OK をクリックします。

LINQ 参照とディレクティブの追加

このチュートリアルでは、プロジェクトに既定ではインストールされないアセンブリを使用します。 System.Data.Linqがプロジェクトの参照として表示されない場合 (ソリューション エクスプローラーで [すべてのファイルを表示] をクリックし、[参照] ノードを展開します)、次の手順で説明するように追加します。

System.Data.Linq を追加するには

  1. ソリューション エクスプローラーで、 [参照設定] を右クリックし、 [参照の追加] をクリックします。

  2. [ 参照の追加 ] ダイアログ ボックスで、[ .NET] をクリックし、[System.Data.Linq] アセンブリをクリックして、[ OK] をクリックします。

    アセンブリがプロジェクトに追加されます。

  3. [参照の追加] ダイアログ ボックスで、.NET をクリックし、[System.Windows.Forms] までスクロールしてクリックし、OK をクリックします。

    このアセンブリは、チュートリアルのメッセージ ボックスをサポートしており、プロジェクトに追加されます。

  4. Module1の上に次のディレクティブを追加します。

    Imports System.Data.Linq
    Imports System.Data.Linq.Mapping
    Imports System.Windows.Forms
    
    

データベース テーブルへのクラスのマッピング

この手順では、クラスを作成し、データベース テーブルにマップします。 このようなクラスは エンティティ クラスと呼ばれる。 マッピングは、 TableAttribute 属性を追加するだけで実現されることに注意してください。 Name プロパティは、データベース内のテーブルの名前を指定します。

エンティティ クラスを作成してデータベース テーブルにマップするには

  • 次のコードを入力するか、 Sub Mainのすぐ上のModule1.vbに貼り付けます。

    <Table(Name:="Customers")> _
    Public Class Customer
    End Class
    

データベース列を表すクラスのプロパティの指定

この手順では、いくつかのタスクを実行します。

  • ColumnAttribute属性を使用して、エンティティ クラスのCustomerIDプロパティとCityプロパティをデータベース テーブル内の列を表すように指定します。

  • CustomerID プロパティは、データベースの主キー列を表すものとして指定します。

  • プライベート ストレージの _CustomerID フィールドと _City フィールドを指定します。 LINQ to SQL では、ビジネス ロジックを含むパブリック アクセサーを使用する代わりに、値を直接格納および取得できます。

2 つのデータベース列の特性を表すには

  • 次のコードを入力するか、 End Classの直前にModule1.vbに貼り付けます。

    Private _CustomerID As String
    <Column(IsPrimaryKey:=True, Storage:="_CustomerID")> _
    Public Property CustomerID() As String
        Get
            Return Me._CustomerID
        End Get
        Set(ByVal value As String)
            Me._CustomerID = value
        End Set
    End Property
    
    Private _City As String
    <Column(Storage:="_City")> _
    Public Property City() As String
        Get
            Return Me._City
        End Get
        Set(ByVal value As String)
            Me._City = value
        End Set
    End Property
    

Northwind データベースへの接続の指定

この手順では、 DataContext オブジェクトを使用して、コード ベースのデータ構造とデータベース自体の間の接続を確立します。 DataContextは、データベースからオブジェクトを取得して変更を送信するメイン チャネルです。

また、データベース内の Customers テーブルに対するクエリの論理型指定されたテーブルとして機能する Table(Of Customer) を宣言します。 これらのクエリは、後の手順で作成して実行します。

データベース接続を指定するには

  • 次のコードを入力するか、 Sub Main メソッドに貼り付けます。

    northwnd.mdf ファイルは linqtest フォルダーにあると見なされることに注意してください。 詳細については、このチュートリアルの前の「前提条件」セクションを参照してください。

    ' Use a connection string.
    Dim db As New DataContext _
        ("c:\linqtest\northwnd.mdf")
    
    ' Get a typed table to run queries.
    Dim Customers As Table(Of Customer) = _
        db.GetTable(Of Customer)()
    

単純なクエリの作成

この手順では、データベース Customers テーブルのどの顧客がロンドンにあるかを検索するクエリを作成します。 この手順のクエリ コードでは、クエリについて説明するだけです。 実行は行いません。 このアプローチは 、遅延実行と呼ばれます。 詳細については、「 LINQ クエリの概要 (C#)」を参照してください。

また、LINQ to SQL によって生成される SQL コマンドを表示するログ出力も生成します。 このログ機能 ( Logを使用) は、デバッグに役立ち、データベースに送信されるコマンドがクエリを正確に表すかどうかを判断するのに役立ちます。

単純なクエリを作成するには

  • Sub Main宣言の後に、次のコードを入力するか、Table(Of Customer) メソッドに貼り付けます。

    ' Attach the log to show generated SQL in a console window.
    db.Log = Console.Out
    
    ' Query for customers in London.
    Dim custQuery = _
        From cust In Customers _
        Where cust.City = "London" _
        Select cust
    

クエリの実行

この手順では、実際にクエリを実行します。 前の手順で作成したクエリ式は、結果が必要になるまで評価されません。 For Eachイテレーションを開始すると、データベースに対して SQL コマンドが実行され、オブジェクトが具体化されます。

クエリを実行するには

  1. Sub Main メソッドの末尾 (クエリの説明の後) に次のコードを入力するか貼り付けます。

    ' Format the message box.
    Dim msg As String = "", title As String = "London customers:", _
        response As MsgBoxResult, style As MsgBoxStyle = _
        MsgBoxStyle.Information
    
    ' Execute the query.
    For Each custObj In custQuery
        msg &= String.Format(custObj.CustomerID & vbCrLf)
    Next
    
    ' Display the results.
    response = MsgBox(msg, style, title)
    
  2. F5 キーを押してアプリケーションをデバッグします。

    注

    アプリケーションでランタイム エラーが発生する場合は、「 チュートリアルによる学習」の「トラブルシューティング」セクションを参照してください。

    メッセージ ボックスには、6 人の顧客の一覧が表示されます。 コンソール ウィンドウに、生成された SQL コードが表示されます。

  3. [ OK] を クリックしてメッセージ ボックスを閉じます。

    アプリケーションが閉じます。

  4. [ファイル] メニューの [すべてを保存] をクリックします。

    次のチュートリアルに進む場合は、このアプリケーションが必要になります。

次のステップ

「チュートリアル: リレーションシップ間のクエリ (Visual Basic)」トピックは、このチュートリアルが終了する場所に進みます。 リレーションシップ間のクエリチュートリアルでは、リレーショナル データベースの 結合 と同様に、LINQ to SQL がテーブル間でクエリを実行する方法を示します。

リレーションシップ間のクエリのチュートリアルを実行する場合は、完了したチュートリアルのソリューションを必ず保存してください。これは前提条件です。

こちらも参照ください