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