チュートリアル : データの操作 (C#) (LINQ to SQL)
更新 : November 2007
このチュートリアルでは、データベースに対してデータの追加、変更、および削除を行う、基本の LINQ to SQL シナリオ全体を示します。顧客の追加、顧客名の変更、および注文の削除を行うため、サンプルの Northwind データベースのコピーを使用します。
メモ : |
---|
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。 |
このチュートリアルは、Visual C# 開発設定を使用して記述されています。
前提条件
このチュートリアルの前提条件は次のとおりです。
このチュートリアルでは、専用フォルダ ("c:\linqtest6") を使用してファイルを保持します。チュートリアルを開始する前にこのフォルダを作成してください。
Northwind サンプル データベース。
開発コンピュータにこのデータベースがない場合は、Microsoft ダウンロード サイトからダウンロードします。手順については、「サンプル データベースのダウンロード (LINQ to SQL)」を参照してください。データベースをダウンロードしたら、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 の [デバッグ] メニューの [デバッグの停止] をクリックして、アプリケーションを閉じます。
新しいエンティティの作成
新しいエンティティを作成する手順は簡単です。new キーワードを使用してオブジェクト (Customer など) を作成できます。
以降のセクションでは、ローカル キャッシュのみに変更を加えます。このチュートリアルの終盤で SubmitChanges を呼び出すまで、変更内容はデータベースに送信されません。
新しい Customer エンティティ オブジェクトを追加するには
次のコードを Main メソッド内の Console.ReadLine(); の前に追加することで、新しい Customer を作成します。
// 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 を変更します。 |