このチュートリアルでは、データベース内のデータを追加、変更、および削除するための基本的なエンド ツー エンドの LINQ to SQL シナリオを提供します。 サンプル Northwind データベースのコピーを使用して、顧客の追加、顧客の名前の変更、注文の削除を行います。
注
次の手順では、一部の Visual Studio ユーザー インターフェイス要素の名前や場所がコンピューターに異なる場合があります。 これらの要素は、使用している Visual Studio エディションと使用する設定によって決まります。 詳細については、「IDEのカスタマイズ」を参照してください。
このチュートリアルは、Visual Basic 開発設定を使用して作成されました。
[前提条件]
このチュートリアルでは、次のものが必要です。
このチュートリアルでは、専用フォルダー ("c:\linqtest2") を使用してファイルを保持します。 チュートリアルを開始する前に、このフォルダーを作成します。
Northwind サンプル データベース。
開発用コンピューターにこのデータベースがない場合は、Microsoft ダウンロード サイトからダウンロードできます。 手順については、「 サンプル データベースのダウンロード」を参照してください。 データベースをダウンロードしたら、northwnd.mdf ファイルを c:\linqtest2 フォルダーにコピーします。
Northwind データベースから生成された Visual Basic コード ファイル。
このファイルは、オブジェクト リレーショナル デザイナーまたは SQLMetal ツールを使用して生成できます。 このチュートリアルは、次のコマンド ラインで SQLMetal ツールを使用して作成されました。
sqlmetal /code:"c:\linqtest2\northwind.vb" /language:vb "C:\linqtest2\northwnd.mdf" /pluralize
詳細については、「 SqlMetal.exe (コード生成ツール)」を参照してください。
概要
このチュートリアルは、次の 6 つの主要なタスクで構成されています。
Visual Studio での LINQ to SQL ソリューションの作成。
データベース コード ファイルをプロジェクトに追加します。
新しい顧客オブジェクトの作成。
顧客の連絡先名の変更。
注文の削除。
これらの変更を Northwind データベースに送信する。
LINQ to SQL ソリューションの作成
この最初のタスクでは、LINQ to SQL プロジェクトをビルドして実行するために必要な参照を含む Visual Studio ソリューションを作成します。
LINQ to SQL ソリューションを作成するには
[Visual Studio ファイル ] メニューの [ 新しいプロジェクト] をクリックします。
[ プロジェクトの種類 ] ウィンドウの [ 新しいプロジェクト ] ダイアログ ボックスで、[ Visual Basic] をクリックします。
[テンプレート] ウィンドウ で 、[ コンソール アプリケーション] をクリックします。
[ 名前 ] ボックスに「 LinqDataManipulationApp」と入力します。
OK をクリックします。
LINQ 参照とディレクティブの追加
このチュートリアルでは、プロジェクトに既定ではインストールされないアセンブリを使用します。
System.Data.Linq
がプロジェクトの参照として表示されない場合 (ソリューション エクスプローラーで [すべてのファイルを表示] をクリックし、[参照] ノードを展開します)、次の手順で説明するように追加します。
System.Data.Linq を追加するには
ソリューション エクスプローラーで、 [参照設定] を右クリックし、 [参照の追加] をクリックします。
[ 参照の追加 ] ダイアログ ボックスで、[ .NET] をクリックし、[System.Data.Linq] アセンブリをクリックして、[ OK] をクリックします。
アセンブリがプロジェクトに追加されます。
コード エディターで、 Module1 の上に次のディレクティブを追加します。
Imports System.Data.Linq Imports System.Data.Linq.Mapping
Northwind コード ファイルをプロジェクトに追加する
これらの手順では、SQLMetal ツールを使用して Northwind サンプル データベースからコード ファイルを生成していることを前提としています。 詳細については、このチュートリアルの前の「前提条件」セクションを参照してください。
northwind コード ファイルをプロジェクトに追加するには
[プロジェクト] メニューの [既存 項目の追加]をクリックします。
[ 既存の項目の追加 ] ダイアログ ボックスで、c:\linqtest2\northwind.vb に移動し、[ 追加] をクリックします。
northwind.vb ファイルがプロジェクトに追加されます。
データベース接続の設定
まず、データベースへの接続をテストします。 特に、データベースの名前 Northwnd には i 文字がないことに注意してください。 次の手順でエラーを生成する場合は、northwind.vb ファイルを確認して、Northwind 部分クラスのスペルを判断します。
データベース接続を設定してテストするには
次のコードを入力するか、
Sub Main
に貼り付けます。' Use a connection string, but connect to ' the temporary copy of the database. Dim db As New Northwnd _ ("C:\linqtest2\northwnd.mdf") ' Keep the console window open after activity stops. Console.ReadLine()
F5 キーを押して、この時点でアプリケーションをテストします。
コンソール ウィンドウが開きます。
コンソール ウィンドウで Enter キーを押すか、Visual Studio の [デバッグ] メニューの [デバッグの停止] をクリックして、アプリケーションを閉じます。
新しいエンティティの作成
新しいエンティティの作成は簡単です。
Customer
キーワードを使用して、オブジェクト (New
など) を作成できます。
このセクションと以降のセクションでは、ローカル キャッシュのみに変更を加えます。 このチュートリアルの最後に SubmitChanges を呼び出すまで、データベースに変更は送信されません。
新しい Customer エンティティ オブジェクトを追加するには
Customer
でConsole.ReadLine
する前に次のコードを追加して、新しいSub Main
を作成します。' Create the new Customer object. Dim newCust As New Customer() newCust.CompanyName = "AdventureWorks Cafe" newCust.CustomerID = "A3VCA" ' Add the customer to the Customers table. db.Customers.InsertOnSubmit(newCust) Console.WriteLine("Customers matching CA before insert:") Dim custQuery = _ From cust In db.Customers _ Where cust.CustomerID.Contains("CA") _ Select cust For Each cust In custQuery Console.WriteLine("Customer ID: " & cust.CustomerID) Next
F5 キーを押してソリューションをデバッグします。
コンソール ウィンドウに表示される結果は次のとおりです。
Customers matching CA before insert:
Customer ID: CACTU
Customer ID: RICAR
新しい行は結果に表示されないことに注意してください。 新しいデータはまだデータベースに送信されていません。
コンソール ウィンドウで Enter キーを押してデバッグを停止します。
エンティティの更新
次の手順では、 Customer
オブジェクトを取得し、そのプロパティの 1 つを変更します。
顧客の名前を変更するには
Console.ReadLine()
の上に次のコードを追加します。Dim existingCust = _ (From cust In db.Customers _ Where cust.CustomerID = "ALFKI" _ Select cust).First() ' Change the contact name of the customer. existingCust.ContactName = "New Contact"
エンティティの削除
同じ顧客オブジェクトを使用して、最初の注文を削除できます。
次のコードは、行間のリレーションシップを切断する方法と、データベースから行を削除する方法を示しています。
行を削除するには
Console.ReadLine()
のすぐ上に次のコードを追加します。' Access the first element in the Orders collection. Dim ord0 As Order = existingCust.Orders(0) ' Access the first element in the OrderDetails collection. Dim detail0 As OrderDetail = ord0.OrderDetails(0) ' Display the order to be deleted. Console.WriteLine _ (vbCrLf & "The Order Detail to be deleted is: OrderID = " _ & detail0.OrderID) ' Mark the Order Detail row for deletion from the database. db.OrderDetails.DeleteOnSubmit(detail0)
データベースへの変更の送信
オブジェクトの作成、更新、削除に必要な最後の手順は、実際に変更をデータベースに送信することです。 この手順を実行しないと、変更はローカルのみで、クエリ結果には表示されません。
データベースに変更を送信するには
Console.ReadLine
のすぐ上に次のコードを挿入します。db.SubmitChanges()
次のコード (
SubmitChanges
の後) を挿入して、変更の送信の前後の効果を表示します。Console.WriteLine(vbCrLf & "Customers matching CA after update:") Dim finalQuery = _ From cust In db.Customers _ Where cust.CustomerID.Contains("CA") _ Select cust For Each cust In finalQuery Console.WriteLine("Customer ID: " & cust.CustomerID) Next
F5 キーを押してソリューションをデバッグします。
コンソール ウィンドウは次のように表示されます。
Customers matching CA before update: Customer ID: CACTU Customer ID: RICAR The Order Detail to be deleted is: OrderID = 10643 Customers matching CA after update: Customer ID: A3VCA Customer ID: CACTU Customer ID: RICAR
コンソール ウィンドウで Enter キーを押してデバッグを停止します。
注
変更を送信して新しい顧客を追加した後は、同じ顧客を再度追加できないため、このソリューションをそのまま実行することはできません。 ソリューションを再度実行するには、追加する顧客 ID の値を変更します。