ASP.NET Core 數據庫上下文 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程
原文:ASP.NET Core 數據庫上下文 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程
ASP.NET Core 數據庫上下文
上一章節中我們了解了 Entity Framework 並講述了如何配置它。本章節我們就來學習如何使用它
EF 框架 ( Entity Framework ) 使我們能夠使用稱為實體 ( Entity) 的公共語言運行時 ( CLR ) 對象查詢,插入,更新和刪除數據
EF 框架將模型中定義的實體和關系映射到數據庫。除此之外,它還具有以下能力:
- 將從數據庫返回的數據實體化為實體對象
- 跟蹤我們對實體對象所做的更改
- 並發處理特性
- 將對象的更改更新到數據庫
- 將對象綁定到控件
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
三個方法
Add
方法向上下文添加一個新的員工對象,然後再保存更改。Get
方法根據 ID 返回一個員工GetAll
方法返回數據庫中所有員工的列表
好了,本小節就到這裏結束吧,我們下一章節再將如何配置 EF 框架服務
ASP.NET Core 數據庫上下文 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程