ASP.NET Core 數據庫上下文 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程


原文:ASP.NET Core 數據庫上下文 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程

ASP.NET Core 數據庫上下文

上一章節中我們了解了 Entity Framework 並講述了如何配置它。本章節我們就來學習如何使用它

EF 框架 ( Entity Framework ) 使我們能夠使用稱為實體 ( Entity) 的公共語言運行時 ( CLR ) 對象查詢,插入,更新和刪除數據

EF 框架將模型中定義的實體和關系映射到數據庫。除此之外,它還具有以下能力:

  1. 將從數據庫返回的數據實體化為實體對象
  2. 跟蹤我們對實體對象所做的更改
  3. 並發處理特性
  4. 將對象的更改更新到數據庫
  5. 將對象綁定到控件

DBContext

EF 框架中,將數據視為對象並負責與之進行交互的主類是 DbContext

使用 DbContext 上下文的時候,我們推薦你定義一個從 DbContext 派生的類,並且定義一個公開的 DbSet 屬性用於表示上下文中指定的實體集合

從邏輯上講,DBContext 映射到具有 DBContext 可理解的表的特定數據庫

在 DBContext 子類中,我們可以創建類型為 DbSet<T> 的屬性。 泛型類型參數 T 將是一種類型的實體,如 Employee 是 HelloWorld 應用程序中的一個實體

范例

現在,我們使用一個簡單的范例來演示下 DBContext 的使用

我們將創建一個 HelloWorldDBContext 類繼承自 DbContext 類

我們把 HelloWorldDBContext 類放到 Models 文件夾中,盡管這個類本身並不是一個模型,但它將所有模型放在一起,以便我們可以將它們與數據庫一起使用

創建 HelloWorldDBContext 類的方法很簡單,我們就不再詳細介紹了,創建成功后的目錄結構如下

而 HelloWorldDBContext 的原始內容如下

using System; using Microsoft.EntityFrameworkCore; namespace HelloWorld.Models { public class HelloWorldDBContext:DbContext { public HelloWorldDBContext() { } } } 

我們的 HelloWorldDBContext 類繼承了命名空間 Microsoft.EntityFrameworkCore 中類 DbContext

我們需要在自己的 HelloWorldDBContext 類中實現一個 Employee 類型的 DbSet

每個 DbSet 將映射到數據庫中的一個表

如果我們有一個 DbSet<Employee> 類型的屬性,並且該屬性的名稱是 Employees,則 EF 框架將默認在數據庫中查找 Employees 表

using System; using Microsoft.EntityFrameworkCore; using HelloWorld.Models; namespace HelloWorld.Models { public class HelloWorldDBContext:DbContext { public HelloWorldDBContext(){} public HelloWorldDBContext(DbContextOptions<HelloWorldDBContext> options) : base(options) { } public DbSet<Employee> Employees { get; set; } } } 

我們首先要修改的就是添加另一個構造函數,該構造函數中接受一個 DbContextOptions<TContext>對象並將其傳遞給 DbContext 的基礎構造函數

我們的 HelloWorldDBContext 非常簡單,因為我們只有一個模型可以使用。 我們只需要一個屬性 DbSet<Employee> ,我們將這個屬性命名為 Employees

現在,我們直接將這個類插入到控制器中,然后控制器可以使用 HelloWorldDBContext 來查詢數據庫。 我們將通過向 HomeController 類添加一個新類來簡化所有這些,在該類中我們實現了添加 employee 和獲取 employee 的方法,如下面的程序所示

HomeController.cs

using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Linq; using HelloWorld.Models; namespace HelloWorld.Controllers { public class HomeController: Controller { public ViewResult Index() { var model = new HomePageViewModel(); using (var context = new HelloWorldDBContext()) { SQLEmployeeData sqlData = new SQLEmployeeData(context); model.Employees = sqlData.GetAll(); } return View(model); } } public class SQLEmployeeData { private HelloWorldDBContext _context { get; set; } public SQLEmployeeData(HelloWorldDBContext context) { _context = context; } public void Add(Employee emp) { _context.Add(emp); _context.SaveChanges(); } public Employee Get(int ID) { return _context.Employees.FirstOrDefault(e => e.ID == ID); } public IEnumerable<Employee> GetAll() { return _context.Employees.ToList<Employee>(); } } public class HomePageViewModel { public IEnumerable<Employee> Employees { get; set; } } } 

上面的 SQLEmployeeData類中,我們定義了 Add 、Get 和 GetAll 三個方法

  1. Add 方法向上下文添加一個新的員工對象,然后再保存更改。
  2. Get 方法根據 ID 返回一個員工
  3. GetAll 方法返回數據庫中所有員工的列表

好了,本小節就到這里結束吧,我們下一章節再將如何配置 EF 框架服務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM