LINQ - เอนทิตี

ส่วนหนึ่งของ ADO.NET Entity Framework LINQ to Entities มีความยืดหยุ่นมากกว่า LINQ เป็น SQL แต่ไม่ได้รับความนิยมมากนักเนื่องจากมีความซับซ้อนและขาดคุณสมบัติหลัก อย่างไรก็ตามไม่มีข้อ จำกัด ของ LINQ กับ SQL ที่อนุญาตให้สืบค้นข้อมูลได้เฉพาะในฐานข้อมูลเซิร์ฟเวอร์ SQL เนื่องจาก LINQ to Entities ช่วยอำนวยความสะดวกในการสืบค้นข้อมูลในผู้ให้บริการข้อมูลจำนวนมากเช่น Oracle, MySQL และอื่น ๆ

ยิ่งไปกว่านั้นยังได้รับการสนับสนุนที่สำคัญจาก ASP.Net ในแง่ที่ผู้ใช้สามารถใช้ประโยชน์จากการควบคุมแหล่งข้อมูลเพื่อดำเนินการค้นหาผ่าน LINQ ไปยังเอนทิตีและอำนวยความสะดวกในการผูกผลลัพธ์โดยไม่จำเป็นต้องมีการเข้ารหัสเพิ่มเติม

LINQ to Entities มีข้อดีเหล่านี้กลายเป็นกลไกมาตรฐานสำหรับการใช้งาน LINQ บนฐานข้อมูลในปัจจุบัน นอกจากนี้ยังเป็นไปได้ด้วย LINQ to Entities เพื่อเปลี่ยนรายละเอียดข้อมูลที่สอบถามและทำการอัปเดตเป็นกลุ่ม ข้อเท็จจริงที่น่าสนใจที่สุดเกี่ยวกับ LINQ to Entities คือมีไวยากรณ์เหมือนกันกับ SQL และยังมีกลุ่มตัวดำเนินการสืบค้นมาตรฐานเดียวกันเช่น Join, Select, OrderBy เป็นต้น

LINQ ไปยังเอนทิตีการสร้างคิวรีและกระบวนการดำเนินการ

  • การก่อสร้าง ObjectQuery อินสแตนซ์จากไฟล์ ObjectContext (การเชื่อมต่อเอนทิตี)

  • การเขียนแบบสอบถามใน C # หรือ Visual Basic (VB) โดยใช้อินสแตนซ์ที่สร้างขึ้นใหม่

  • การแปลงตัวดำเนินการเคียวรีมาตรฐานของ LINQ ตลอดจนนิพจน์ LINQ เป็นแผนผังคำสั่ง

  • การดำเนินการค้นหาโดยส่งข้อยกเว้นใด ๆ ที่พบไปยังไคลเอ็นต์โดยตรง

  • กลับไปยังไคลเอนต์ผลการค้นหาทั้งหมด

ObjectContext นี่คือคลาสหลักที่เปิดใช้งานการโต้ตอบกับ Entity Data Modelหรือกล่าวอีกนัยหนึ่งทำหน้าที่เป็นสะพานที่เชื่อมต่อ LINQ กับฐานข้อมูล ต้นไม้คำสั่งเป็นตัวแทนของแบบสอบถามที่เข้ากันได้กับกรอบงานเอนทิตี

ในทางกลับกัน Entity Framework นั้นเป็นจริง Object Relational Mapperโดยทั่วไปเรียกย่อว่า ORM โดยนักพัฒนาที่สร้างวัตถุทางธุรกิจเช่นเดียวกับเอนทิตีตามตารางฐานข้อมูลและอำนวยความสะดวกในการดำเนินการขั้นพื้นฐานต่างๆเช่นสร้างอัปเดตลบและอ่าน ภาพประกอบต่อไปนี้แสดงกรอบงานเอนทิตีและส่วนประกอบต่างๆ

ตัวอย่างของ ADD, UPDATE และ DELETE โดยใช้ LINQ กับ Entity Model

ขั้นแรกให้เพิ่ม Entity Model โดยทำตามขั้นตอนด้านล่าง

Step 1- คลิกขวาที่โครงการและคลิกเพิ่มรายการใหม่จะเปิดหน้าต่างตามด้านล่าง เลือก ADO.NET Entity Data Model และระบุชื่อและคลิกที่ Add

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

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -