LINQ-エンティティ

ADO.NET EntityFrameworkの一部であるLINQto Entitiesは、LINQ to SQLよりも柔軟性がありますが、その複雑さと主要な機能の欠如のため、あまり人気がありません。ただし、LINQ to Entitiesは、Oracle、MySQLなどの多数のデータプロバイダーでのデータクエリを容易にするため、SQLサーバーデータベースでのみデータクエリを許可するLINQ toSQLの制限はありません。

さらに、ユーザーがLINQを介してエンティティへのクエリを実行するためにデータソース管理を利用でき、追加のコーディングを必要とせずに結果のバインドを容易にするという意味で、ASP.Netから大きなサポートを受けています。

LINQ to Entitiesは、これらの利点のために、今日のデータベースでLINQを使用するための標準メカニズムになっています。LINQ to Entitiesを使用すると、クエリされたデータの詳細を変更したり、バッチ更新を簡単にコミットしたりすることもできます。LINQ to Entitiesの最も興味深い事実は、SQLと同じ構文を持ち、Join、Select、OrderByなどの標準クエリ演算子の同じグループを持っていることです。

LINQ toEntitiesクエリの作成と実行のプロセス

  • の建設 ObjectQuery からのインスタンス ObjectContext (エンティティ接続)

  • 新しく構築されたインスタンスを使用して、C#またはVisual Basic(VB)でクエリを作成する

  • LINQの標準クエリ演算子とLINQ式のコマンドツリーへの変換

  • 発生した例外をクライアントに直接渡すクエリを実行する

  • すべてのクエリ結果をクライアントに返す

ObjectContext ここに、相互作用を可能にするプライマリクラスがあります Entity Data Modelつまり、LINQをデータベースに接続するブリッジとして機能します。コマンドツリーは、ここではEntityFrameworkと互換性のあるクエリ表現です。

一方、EntityFrameworkは実際には Object Relational Mapperデータベーステーブルに従ってビジネスオブジェクトとエンティティの生成を行い、作成、更新、削除、読み取りなどのさまざまな基本操作を容易にする開発者によって、一般にORMと略されます。次の図は、エンティティフレームワークとそのコンポーネントを示しています。

エンティティモデルでLINQを使用したADD、UPDATE、およびDELETEの例

まず、以下の手順に従ってエンティティモデルを追加します。

Step 1−プロジェクトを右クリックし、[新しいアイテムの追加]をクリックすると、以下のようなウィンドウが開きます。ADO.NETエンティティデータモデルを選択し、名前を指定して、[追加]をクリックします。

Step 2 −選択 Generate from database.

Step 3 −ドロップダウンメニューから[データベース接続]を選択します。

Step 4 −すべてのテーブルを選択します。

次のコードを記述します。

using DataAccess;
using System;
using System.Linq;

namespace LINQTOSQLConsoleApp {
   public class LinqToEntityModel {
      static void Main(string[] args) {

         using (LinqToSQLDBEntities context = new LinqToSQLDBEntities()) {
            //Get the List of Departments from Database
            var departmentList = from d in context.Departments
            select d;

            foreach (var dept in departmentList) {
               Console.WriteLine("Department Id = {0} , Department Name = {1}",
                  dept.DepartmentId, dept.Name);
            }

            //Add new Department
            DataAccess.Department department = new DataAccess.Department();
            department.Name = "Support";

            context.Departments.Add(department);
            context.SaveChanges();

            Console.WriteLine("Department Name = Support is inserted in Database");

            //Update existing Department
            DataAccess.Department updateDepartment = context.Departments.FirstOrDefault(d ⇒d.DepartmentId == 1);
            updateDepartment.Name = "Account updated";
            context.SaveChanges();

            Console.WriteLine("Department Name = Account is updated in Database");

            //Delete existing Department
            DataAccess.Department deleteDepartment = context.Departments.FirstOrDefault(d ⇒d.DepartmentId == 3);
            context.Departments.Remove(deleteDepartment);
            context.SaveChanges();

            Console.WriteLine("Department Name = Pre-Sales is deleted in Database");

            //Get the Updated List of Departments from Database
            departmentList = from d in context.Departments
            select d;

            foreach (var dept in departmentList) {
               Console.WriteLine("Department Id = {0} , Department Name = {1}",
                  dept.DepartmentId, dept.Name);
            }
         }

         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

上記のコードをコンパイルして実行すると、次の結果が得られます。