LINQ - 实体
作为 ADO.NET 实体框架的一部分,LINQ to Entities 比 LINQ to SQL 更加灵活,但由于其复杂性和缺乏关键特性而不太受欢迎。然而,它没有 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 相同,甚至拥有相同的标准查询运算符组,如 Join、Select、OrderBy 等。
LINQ to Entities 查询创建和执行过程
从 ObjectContext(实体连接)构建 ObjectQuery 实例
使用新构建的实例,用 C# 或 Visual Basic (VB) 编写查询
将 LINQ 的标准查询运算符以及 LINQ 表达式转换为命令树
执行查询,并将遇到的任何异常直接传递给客户端
将所有查询结果返回给客户端
ObjectContext 这里是指主要类,它能够与 实体数据模型 进行交互,或者换句话说,充当连接 LINQ 与数据库的桥梁。命令树是此处与实体框架兼容的查询表示形式。
另一方面,实体框架实际上是 对象关系映射器,开发人员通常将其缩写为 ORM,它根据数据库表生成业务对象和实体,并方便执行创建、更新、删除和读取等各种基本操作。下图显示了实体框架及其组件。
使用 LINQ 和实体模型进行 ADD、UPDATE 和 DELETE 的示例
首先按照以下步骤添加实体模型。
步骤 1 - 右键单击项目,然后单击添加新项将打开如下所示的窗口。选择 ADO.NET 实体数据模型,并指定名称,然后单击添加。
步骤 2 - 选择从数据库生成。
步骤 3 - 从下拉菜单中选择数据库连接。
步骤 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();
}
}
}
编译并执行上述代码后,将产生以下结果: