チュートリアル : 簡単なオブジェクト モデルとクエリ (Visual Basic) (LINQ to SQL)
更新 : November 2007
このチュートリアルでは、複雑さを抑えた、LINQ to SQL 全体の基本的なシナリオを示します。サンプルの Northwind データベースにある Customers テーブルのモデル化を行うエンティティ クラスを作成します。次に、住所がロンドンの顧客を表示するための簡単なクエリを作成します。
このチュートリアルでは、LINQ to SQL の考え方を示すために、コード中心の方法をあえて使用しています。通常は、オブジェクト リレーショナル デザイナを使用してオブジェクト モデルを作成できます。詳細についてはオブジェクト リレーショナル デザイナ (O/R デザイナ) およびオブジェクト リレーショナル デザイナー (O/R デザイナー) およびオブジェクト リレーショナル デザイナー (O/R デザイナー)を参照してください。
メモ : |
---|
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。 |
このチュートリアルは、Visual Basic 開発設定を使用して記述されています。
前提条件
このチュートリアルでは、専用フォルダ ("c:\linqtest") を使用してファイルを保持します。チュートリアルを開始する前にこのフォルダを作成してください。
このチュートリアルには、Northwind サンプル データベースが必要です。開発用コンピュータにこのデータベースがない場合は、Microsoft ダウンロード サイトからダウンロードします。手順については、「サンプル データベースのダウンロード (LINQ to SQL)」を参照してください。データベースをダウンロードしたら、ファイルを c:\linqtest フォルダにコピーします。
概要
このチュートリアルは、主に次の 6 つの手順で構成されています。
Visual Studio で LINQ to SQL ソリューションを作成します。
データベース テーブルにクラスを割り当てます。
クラスに対し、データベース列を表すプロパティを指定します。
Northwind データベースへの接続を指定します。
データベースに対して実行する簡単なクエリを作成します。
クエリを実行し、結果を確認します。
ビデオ デモについては、「ビデオによる操作説明: 簡単なオブジェクト モデルとクエリ (Visual Basic) (LINQ to SQL)」を参照してください。
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 プロパティを使用して、データベースのテーブルの名前を指定します。
エンティティ クラスを作成し、データベース テーブルに対応付けるには
Module1.vb で、Sub Main の直前に次のコードを入力または貼り付けます。
<Table(Name:="Customers")> _ Public Class Customer End Class
データベース列を表すプロパティをクラスに追加する
この手順では、いくつかのタスクを実行します。
ColumnAttribute 属性を使用して、エンティティ クラスの CustomerID プロパティおよび City プロパティを、データベース テーブルの列を表すものとして指定します。
CustomerID プロパティを、データベースの主キー列を表すものとして指定します。
プライベートでの格納用として _CustomerID フィールドおよび _City フィールドを指定します。こうすることで、LINQ to SQL は、ビジネス ロジックを含む場合があるパブリック アクセサを使用せずに、値を直接格納および取得できます。
2 つのデータベース列の特性を指定するには
Module1.vb で、End Class の直前に次のコードを入力または貼り付けます。
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 テーブルから、住所が London の顧客を検索するクエリを作成します。この手順で作成するクエリ コードは、クエリを指定するだけです。実行は行いません。このような方法を遅延実行といいます。詳細については、「LINQ クエリの概要」を参照してください。
また、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 コマンドが実行され、オブジェクトが実体化されます。
クエリを実行するには
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 キーを押してアプリケーションをデバッグします。
メモ : アプリケーションでランタイム エラーが発生した場合は、「チュートリアルによる学習 (LINQ to SQL)」のトラブルシューティングのセクションを参照してください。
メッセージ ボックスには 6 人の顧客の一覧が表示されます。コンソール ウィンドウには生成された SQL コードが表示されます。
[OK] をクリックしてメッセージ ボックスを閉じます。
アプリケーションが終了します。
[ファイル] メニューの [すべてを保存] をクリックします。
引き続き次のチュートリアルに進む場合は、このアプリケーションが必要になります。
次の手順
このチュートリアルに続く内容が、「チュートリアル : リレーションシップ間でクエリを実行する (Visual Basic) (LINQ to SQL)」のトピックにあります。「リレーションシップ間でクエリを実行する」のチュートリアルでは、リレーショナル データベースの結合と同じように、複数のテーブルにまたがったクエリを LINQ to SQL で行う方法を説明します。
「リレーションシップ間でクエリを実行する」のチュートリアルに進む場合は、必要条件として、ここで完了したチュートリアルのソリューションを保存しておく必要があります。