このチュートリアルでは、複雑さを最小限に抑えた基本的なエンド ツー エンドの 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 ソリューションを作成するには
[ ファイル ] メニューの [ 新しいプロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] ウィンドウで、[Visual Basic] をクリックします。
[テンプレート] ウィンドウ で 、[ コンソール アプリケーション] をクリックします。
[ 名前 ] ボックスに「 LinqConsoleApp」と入力します。
OK をクリックします。
LINQ 参照とディレクティブの追加
このチュートリアルでは、プロジェクトに既定ではインストールされないアセンブリを使用します。
System.Data.Linq
がプロジェクトの参照として表示されない場合 (ソリューション エクスプローラーで [すべてのファイルを表示] をクリックし、[参照] ノードを展開します)、次の手順で説明するように追加します。
System.Data.Linq を追加するには
ソリューション エクスプローラーで、 [参照設定] を右クリックし、 [参照の追加] をクリックします。
[ 参照の追加 ] ダイアログ ボックスで、[ .NET] をクリックし、[System.Data.Linq] アセンブリをクリックして、[ OK] をクリックします。
アセンブリがプロジェクトに追加されます。
[参照の 追加 ] ダイアログ ボックスで、[ .NET] をクリックし、[System.Windows.Forms] までスクロールしてクリックし、[OK] をクリック します。
このアセンブリは、チュートリアルのメッセージ ボックスをサポートしており、プロジェクトに追加されます。
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を使用) は、デバッグに役立ち、データベースに送信されるコマンドがクエリを正確に表すかどうかを判断するのに役立ちます。
単純なクエリを作成するには
Table(Of Customer)
宣言の後に、次のコードを入力するか、Sub Main
メソッドに貼り付けます。' 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 コマンドが実行され、オブジェクトが具体化されます。
クエリを実行するには
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)
F5 キーを押してアプリケーションをデバッグします。
注
アプリケーションで実行時エラーが発生する場合は、「 チュートリアルによる学習」の「トラブルシューティング」セクションを参照してください。
メッセージ ボックスには、6 人の顧客の一覧が表示されます。 コンソール ウィンドウに、生成された SQL コードが表示されます。
[ OK] を クリックしてメッセージ ボックスを閉じます。
アプリケーションが閉じます。
[ファイル] メニューの [すべてを保存] をクリックします。
次のチュートリアルに進む場合は、このアプリケーションが必要になります。
次のステップ
「チュートリアル: リレーションシップ間のクエリ (Visual Basic)」トピックは、このチュートリアルが終了する場所に進みます。 リレーションシップ間のクエリチュートリアルでは、リレーショナル データベースの 結合 と同様に、LINQ to SQL がテーブル間でクエリを実行する方法を示します。
リレーションシップ間のクエリのチュートリアルを実行する場合は、完了したチュートリアルのソリューションを必ず保存してください。これは前提条件です。