LINQ - 实体

LINQ to Entities 是 ADO.NET 实体框架的一部分,比 LINQ to SQL 更灵活,但由于其复杂性和缺少关键功能,因此并不流行。但是,它没有 LINQ to SQL 的限制,即只允许在 SQL 服务器数据库中进行数据查询,因为 LINQ to Entities 可以在大量数据提供程序(如 Oracle、MySQL 等)中进行数据查询。

此外,它得到了 ASP.Net 的大力支持,因为用户可以使用数据源控件通过 LINQ to Entities 执行查询,并方便绑定结果,而无需任何额外的编码。

由于这些优势,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 是此处的主要类它支持与实体数据模型交互,或者换句话说,充当连接 LINQ 和数据库的桥梁。命令树在这里是与实体框架兼容的查询表示。

另一方面,实体框架实际上是对象关系映射器,开发人员通常将其缩写为 ORM,它根据数据库表生成业务对象和实体,并促进各种基本操作,如创建、更新、删除和读取。下图显示了实体框架及其组件。

LINQ - 实体

使用 LINQ 和实体模型添加、更新和删除的示例

首先按照以下步骤添加实体模型。

步骤 1 − 右键单击​​项目,然后单击添加新项目将打开如下所示的窗口。选择 ADO.NET 实体数据模型并指定名称,然后单击添加。

LINQ - 实体模型

步骤 2 − 选择从数据库生成。

LINQ - 实体模型

步骤 3 − 从下拉菜单中选择数据库连接。

LINQ - 实体模型

步骤 4 −选择所有表。

LINQ - Entity Model

现在编写以下代码。

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("
Press any key to continue.");
         Console.ReadKey();
      }
   }
}

当上述代码被编译并执行时,它会产生以下结果 −

LINQ - Entity Model Result