Linq-entities

提供:Dev Guides
移動先:案内検索

LINQ-エンティティ

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

さらに、ユーザーがLINQ to Entitiesを介してクエリを実行するためにデータソースコントロールを利用でき、余分なコーディングを必要とせずに結果をバインドできるという意味で、ASP.Netから主要なサポートを受けています。

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

LINQ to Entitiesクエリの作成および実行プロセス

  • ObjectContext (エンティティ接続)からの ObjectQuery インスタンスの構築
  • 新しく構築されたインスタンスを使用して、C#またはVisual Basic(VB)でクエリを作成する
  • LINQの標準クエリ演算子とLINQ式のコマンドツリーへの変換
  • 発生した例外をクライアントに直接渡すクエリを実行する
  • すべてのクエリ結果をクライアントに返す

ここでは、 ObjectContext は、 Entity Data Model との対話を可能にする主要なクラスです。つまり、LINQをデータベースに接続するブリッジとして機能します。 ここでのコマンドツリーは、Entityフレームワークと互換性のあるクエリ表現です。

一方、Entity Frameworkは、実際には*オブジェクトリレーショナルマッパー*であり、ビジネスオブジェクトやデータベーステーブルごとのエンティティを生成し、作成、更新、削除などのさまざまな基本操作を容易にする開発者によってORMと略されます。読んで。 次の図は、エンティティフレームワークとそのコンポーネントを示しています。

LINQ-エンティティ

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

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

  • ステップ1 *-プロジェクトを右クリックして[新しい項目を追加]をクリックすると、以下のようにウィンドウが開きます。 ADO.NET Entity Data Modelを選択し、名前を指定して[追加]をクリックします。

LINQ-エンティティモデル

ステップ2 *-[データベースから生成]を選択します。

LINQ-エンティティモデル

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

LINQ-エンティティモデル

  • ステップ4 *-すべてのテーブルを選択します。

LINQ-エンティティモデル

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

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();
      }
   }
}

上記のコードをコンパイルして実行すると、次の結果が生成されます-

LINQ-エンティティモデルの結果