チュートリアル: リレーションシップを介したクエリの実行 (Visual Basic)
このチュートリアルでは、LINQ to SQL の associations を使用してデータベース内の外部キー リレーションシップを表現する方法について説明します。
注意
次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「IDE をカスタマイズする」をご覧ください。
このチュートリアルは、Visual Basic 開発設定を使用して記述されています。
必須コンポーネント
「チュートリアル:簡単なオブジェクト モデルとクエリ (Visual Basic)」を完了している必要があります。 このチュートリアルは前のチュートリアルに基づいて作成されており、c:\linqtest に northwnd.mdf ファイルがあることが前提です。
概要
このチュートリアルは、主に次の 3 つの手順で構成されています。
エンティティ クラスを追加して、Northwind サンプル データベース内の Orders テーブルを表します。
Customer
クラスに注釈を付けて、Customer
クラスとOrder
クラス間のリレーションシップを強化します。クエリを作成および実行して、
Order
クラスによるCustomer
情報の取得のプロセスをテストします。
テーブル間のリレーションシップを指定する
Customer
クラス定義の後に、次のコードから成る Order
エンティティ クラス定義を作成します。これは、Orders.Customer
が外部キーとして Customers.CustomerID
に関係することを示しています。
Order エンティティ クラスを追加するには
Customer
クラスの後に次のコードを入力または貼り付けます。<Table(Name:="Orders")> _ Public Class Order Private _OrderID As Integer Private _CustomerID As String Private _Customers As EntityRef(Of Customer) Public Sub New() Me._Customers = New EntityRef(Of Customer)() End Sub <Column(Storage:="_OrderID", DbType:="Int NOT NULL IDENTITY", _ IsPrimaryKey:=True, IsDBGenerated:=True)> _ Public ReadOnly Property OrderID() As Integer Get Return Me._OrderID End Get End Property ' No need to specify a setter because IsDBGenerated is true. <Column(Storage:="_CustomerID", DbType:="NChar(5)")> _ Public Property CustomerID() As String Get Return Me._CustomerID End Get Set(ByVal value As String) Me._CustomerID = value End Set End Property <Association(Storage:="_Customers", ThisKey:="CustomerID")> _ Public Property Customers() As Customer Get Return Me._Customers.Entity End Get Set(ByVal value As Customer) Me._Customers.Entity = value End Set End Property End Class
Customer クラスに注釈を付ける
ここでは、Customer
クラスに注釈を付けて、Order
クラスとのリレーションシップを指定します。 (いずれかの方向のリレーションシップが定義されていればリンクを作成できるため、この注釈の追加は必ずしも必要ではありません。しかし、この注釈を追加することで、どちらの方向でも簡単にオブジェクトを移動できます。)
Customer クラスに注釈を付けるには
Customer
クラスに次のコードを入力または貼り付けます。Private _Orders As EntitySet(Of Order) Public Sub New() Me._Orders = New EntitySet(Of Order)() End Sub <Association(Storage:="_Orders", OtherKey:="CustomerID")> _ Public Property Orders() As EntitySet(Of Order) Get Return Me._Orders End Get Set(ByVal value As EntitySet(Of Order)) Me._Orders.Assign(value) End Set End Property
Customer-Order リレーションシップ間のクエリを作成および実行する
Order
オブジェクトから Customer
オブジェクトに、またはその逆の順序で、直接アクセスできます。 Customer と Order の間に、明示的な "結合" は必要ありません。
Customer オブジェクトを使用して Order オブジェクトにアクセスするには
Sub Main
メソッドに次のコードを入力または貼り付けることによって、メソッドを変更します。' Query for customers who have no orders. Dim custQuery = _ From cust In Customers _ Where Not cust.Orders.Any() _ Select cust Dim msg As String = "", title As String = _ "Customers With No Orders", response As MsgBoxResult, _ style As MsgBoxStyle = MsgBoxStyle.Information For Each custObj In custQuery msg &= String.Format(custObj.CustomerID & vbCrLf) Next response = MsgBox(msg, style, title)
F5 キーを押して、アプリケーションをデバッグします。
2 つの名前がメッセージ ボックスに表示され、生成された SQL コードがコンソール ウィンドウに表示されます。
メッセージ ボックスを閉じて、デバッグを停止します。
データベースの厳密に型指定されたビューを作成する
データベースの厳密に型指定されたビューを使用すると、操作が非常に簡単になります。 DataContext オブジェクトを厳密に型指定することによって、GetTable を呼び出す必要がありません。 厳密に型指定された DataContext オブジェクトを使用する場合は、すべてのクエリで、厳密に型指定されたテーブルを使用できます。
次の手順では、データベース内の Customers テーブルに対応する厳密に型指定されたテーブルとして、Customers
を作成します。
DataContext オブジェクトを厳密に型指定するには
Customer
クラス宣言の上に次のコードを追加します。Public Class Northwind Inherits DataContext ' Table(Of T) abstracts database details per ' table/data type. Public Customers As Table(Of Customer) Public Orders As Table(Of Order) Public Sub New(ByVal connection As String) MyBase.New(connection) End Sub End Class
Sub Main
を次のように変更し、厳密に型指定された DataContext を使用するようにします。' Use a connection string. Dim db As New Northwind _ ("C:\linqtest\northwnd.mdf") ' Query for customers from Seattle. Dim custs = _ From cust In db.Customers _ Where cust.City = "Seattle" _ Select cust For Each custObj In custs Console.WriteLine("ID=" & custObj.CustomerID) Next ' Freeze the console window. Console.ReadLine()
F5 キーを押して、アプリケーションをデバッグします。
コンソール ウィンドウの出力は次のとおりです。
ID=WHITC
コンソール ウィンドウで Enter キーを押してアプリケーションを終了します。
このアプリケーションを保存するには、 [ファイル] メニューの [すべてを保存] をクリックします。
次の手順
次のチュートリアル「チュートリアル: データの操作 (Visual Basic)」では、データの操作方法について説明します。 そのチュートリアルを実行するのに、既に終了したこのシリーズの 2 つのチュートリアルを保存する必要はありません。