首頁  >  文章  >  後端開發  >  實體框架 C#

實體框架 C#

王林
王林原創
2024-09-03 15:20:001081瀏覽

以下文章提供了實體框架 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