📅  最后修改于: 2020-11-21 07:09:12             🧑  作者: Mango
作为ADO.NET实体框架的一部分,LINQ to Entities比LINQ to SQL更灵活,但由于其复杂性和缺少关键功能而并不流行。但是,它不具有LINQ to SQL的局限性,后者仅允许在SQL Server数据库中进行数据查询,因为LINQ to Entities可以促进大量数据提供程序(如Oracle,MySQL等)中的数据查询。
此外,它在某种程度上得到了ASP.Net的大力支持,即用户可以利用数据源控件通过LINQ到Entities执行查询,并且不需要任何额外的编码就可以方便地绑定结果。
LINQ to Entities具有这些优势,已成为当今在数据库上使用LINQ的标准机制。 LINQ to Entities还可以更改查询的数据详细信息并轻松提交批处理更新。关于LINQ to Entities的最有趣的事实是,它具有与SQL相同的语法,甚至具有相同的标准查询运算符组,例如Join,Select,OrderBy等。
从ObjectContext中构造一个ObjectQuery实例(实体连接)
通过使用新构造的实例在C#或Visual Basic(VB)中组成查询
将LINQ的标准查询运算符以及LINQ表达式转换为命令树
执行查询,将遇到的任何异常直接传递给客户端
向客户返回所有查询结果
这里的ObjectContext是允许与实体数据模型进行交互的主要类,换句话说,它是将LINQ连接到数据库的桥梁。命令树是与Entity Framework兼容的查询表示形式。
另一方面,实体框架实际上是对象关系映射器,通常由开发人员缩写为ORM,开发人员根据数据库表生成业务对象以及实体,并促进各种基本操作,如创建,更新,删除和读取。下图显示了实体框架及其组件。
首先按照以下步骤添加实体模型。
步骤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();
}
}
}
编译并执行上述代码后,将产生以下结果-