首页  >  文章  >  后端开发  >  实体框架 C#

实体框架 C#

王林
王林原创
2024-09-03 15:20:001082浏览

以下文章提供了实体框架 C# 的概述。实体框架是一种对象关系映射 (ORM),它通过消除应用程序中的冗余作业来帮助提高用户的应用程序生产力。 EF 构建了在 DB 中写入或读取数据所需的 DB 命令并完美执行它们。最后,EF 在 DB 中执行查询,并将结果放入域对象中以供应用程序使用。

C# 中的实体框架是什么?

实体框架是.Net应用程序的对象源关系映射(ORM)框架,它允许开发人员使用特定于域的对象来处理关系数据,而无需了解数据库中的列和表。数据被存储。此外,它还描述了实体框架最大限度地减少了开发人员通常编写的数据访问代码。

C# 项目中的实体框架

假设部门表和员工表被视为包含多个部门的记录以及各个部门的员工。

为了实现这一点,我们必须构建 Department 和 Employee 类。然后,为了从数据库检索这些数据,我们需要编写 ADO.NET 代码。最后,当检索数据时,我们必须创建 Employee 和 Department 对象,以使用恢复的数据填充它们。
上面的整个事情很繁琐,但是通过Entity Framework,这很容易;这些事情可以自动完成;我们需要向 EF 提供 DB Schema。让我们看看以下使用 EF 创建应用程序的步骤。

要创建数据库模式,请使用 SQL 脚本创建数据库 EF_Demo_DB 并创建 Employee 和 Department 表

代码:

-- to create the Database EF_Demo_DB
CREATE DATABASE EF_Demo_DB;
GO
-- Use EF_Demo_DB database
USE EF_Demo_DB;
GO
-- to Create the table Departments
CREATE TABLE Departments
(
ID INT PRIMARY KEY IDENTITY(1,1),
Name VARCHAR(50),
Location VARCHAR(50)
)
Go
-- to Create the table Employees
CREATE TABLE Employees
(
ID INT PRIMARY KEY IDENTITY(1,1),
Name VARCHAR(50),
Email VARCHAR(50),
Gender VARCHAR(50),
Salary INT,
DepartmentId INT FOREIGN KEY REFERENCES Departments(ID)
)
Go
-- --to Populate the table with few records
INSERT INTO Departments VALUES ('HR', 'Bangalore')
INSERT INTO Departments VALUES ('Sales', 'Cochin')
INSERT INTO Departments VALUES ('IT', 'Chennai')
Go
--to Populate the table with few records
INSERT INTO Employees VALUES ('Philip', '[email protected]', 'Male', 45000, 2)
INSERT INTO Employees VALUES ('Mary', '[email protected]', 'Female', 30000, 2)
INSERT INTO Employees VALUES ('Valarie', '[email protected]', 'Female', 35000, 3)
INSERT INTO Employees VALUES ('John', '[email protected]', 'Male', 80000, 1)
INSERT INTO Employees VALUES ('Joseph', 'jojog.com', 'Male', 60000, 1)
INSERT INTO Employees VALUES ('Steve', '[email protected]', 'Male', 45000, 3)
INSERT INTO Employees VALUES ('Peter', '[email protected]', 'Male', 60000, 1)
INSERT INTO Employees VALUES ('Rio', '[email protected]', 'Female', 345000, 3)
INSERT INTO Employees VALUES ('Ben', '[email protected]', 'Male', 70000, 1)
Go

创建控制台应用程序

数据准备好后,创建一个名为 EFDemo 的新控制台应用程序,如下所示:

实体框架 C#

添加 ADO.NET 实体数据模型

要创建控制台应用程序,请添加 ADO.NET 实体数据模型,然后右键单击项目并添加 -New Item-Data- ADO.NET 实体数据模型,并将名称命名为 EmployeeDataModel,如下所示。

实体框架 C#

单击“添加”按钮后,从数据库中选择 EF 设计器,然后单击“下一步”按钮,如下所示从数据库中选择 EF 设计器;在这里,我们使用 EF 数据库优先方法。

实体框架 C#

单击“下一步”按钮后,它会要求您选择如图所示的数据连接向导;单击“新建连接”按钮。

实体框架 C#

单击“新建连接”按钮后,提供必要的数据库详细信息,最后“测试连接”,然后单击“确定”。

实体框架 C#

选择数据连接并将实体连接设置保存在App中。然后,如下所示进行配置,命名为 EF_Demo_DBEntities,然后单击“下一步”按钮。

实体框架 C#

此处要求您选择 Entity Framework 6.x 并选择“下一步”按钮,如图所示。

实体框架 C#

选择所需的表,将模型命名空间更改为“EmployeeModel”,然后单击“完成”按钮,如图所示。

实体框架 C#

单击“完成”按钮会生成 EmployeeDataModel.edmx 文件。

实体框架 C#

这是 EDMX 文件的结构,如下所示,

实体框架 C#

使用 EF,我们创建了应用程序。

代码:

namespace EFDemo
{
class Program
{
static void Main(string[] args)
{
using (EF_Demo_DBEntities DBEntities = new EF_Demo_DBEntities())
{
List<Department> listDepartments = DBEntities.Departments.ToList();
Console.WriteLine();
foreach (Department dept in listDepartments)
{
Console.WriteLine(" Department = {0}, Location = {1}", dept.Name, dept.Location);
foreach (Employee emp in dept.Employees)
{
Console.WriteLine("\t Name = {0}, Email = {1}, Gender = {2}, salary = {3}",
emp.Name, emp.Email, emp.Gender, emp.Salary);
}
Console.WriteLine();
}
Console.ReadKey();
}
}
}
}

数据库模式和类

实体框架功能:

让我们看看实体框架的特点:

  • 建模: EF 基于具有各种数据类型的 get/set 属性的属性构建 EDM。如果将实体数据存储或查询到数据库,它会使用该模型。
  • 查询:实体框架允许 LINQ 查询从数据库获取数据。 DB 提供程序将 LINQ 的查询转换为 DB 特定的查询语言。 EF 允许对数据库执行 SQL 查询。
  • 更改跟踪:实体框架跟踪需要提交到数据库的属性值的大小写发生的更改。
  • 存储: 实体框架在调用 SaveChanges() 方法时根据修改实体对数据库执行 INSERT、DELETE 和 UPDATE 命令。此外,实体框架 EF 提供了 SaveChangesAsync() 方法。
  • 并发:实体框架默认使用乐观并发来保护从数据库获取数据后通过另一个用户进行的更改。
  • 缓存:实体框架包含开箱即用的初始缓存级别。因此查询从缓存中返回数据,而不是访问数据库。
  • 配置:实体框架允许使用数据注释属性或 API 配置 EF 模型,以默认覆盖约定。
  • 内置约定:实体框架通过编程配置模式遵循约定,并包含自动配置 EF 模型的默认规则。

结论

在本文中,我们了解了 EF 的功能以及如何创建实体框架。然而,与 EF 相比,使用 ADO.NET 代码是乏味的。此外,这是一个耗时且容易出错的过程,因此 Microsoft 提供了一个名为 Entity Framework 的框架来为我们的应用程序自动执行整个与数据库相关的工作。

以上是实体框架 C#的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn