Linq 简明教程
LINQ - Entities
作为 ADO.NET 实体框架的一部分,LINQ to Entities 比 LINQ to SQL 更灵活,但由于其复杂性和缺乏关键特性而不太流行。但是,它没有 LINQ to SQL 的限制,后者仅允许在 SQL Server 数据库中进行数据查询,因为 LINQ to Entities 可以在大量数据提供程序(如 Oracle、MySQL 等)中促进数据查询。
此外,它得到了 ASP.Net 的大力支持,这意味着用户可以利用数据源控件通过 LINQ to Entities 执行查询,并促进结果的绑定,而无需任何额外的编码。
LINQ to Entities 凭借这些优势已成为目前面向数据库使用 LINQ 的标准机制。使用 LINQ to Entities 还可以更改查询的数据详细信息,并轻松地提交批处理更新。最吸引人的是,LINQ to Entities 具有与 SQL 相同的语法,甚至拥有相同的标准查询操作符组,如“联接”、“选择”、“按顺序排列”等。
LINQ to Entities Query Creation and Execution Process
-
根据 ObjectQuery (Entity 连接)构造 ObjectContext 实例
-
使用新构造的实例用 C# 或 Visual Basic (VB) 中的编写查询
-
将 LINQ 的标准查询操作符以及 LINQ 表达式转换成命令树
-
执行查询,将遇到的任何异常直接传递给客户端
-
向客户端返回所有查询结果
ObjectContext 这里的主要类,可与 Entity Data Model 交互;换句话说,它起到了 LINQ 与数据库之间的桥梁作用。命令树这里是为了与 Entity 框架兼容的查询表示形式。
另一方面,Entity Framework 实际上是 Object Relational Mapper ,开发人员通常将其缩写为 ORM,它可以根据数据库表生成业务对象以及实体,并支持各种基本操作,如创建、更新、删除和读取。下图显示了 Entity 框架及其组件。
Example of ADD, UPDATE, and DELETE using LINQ with Entity Model
首先按照以下步骤添加 Entity 模型。
Step 1 − 右键单击项目,然后单击添加新项目,将打开如下图所示的窗口。选择 ADO.NET Entity Data Model,指定名称,然后单击添加。
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();
}
}
}
编译并执行上述代码后,将产生以下结果 −