1. 程式人生 > >ASP.NET Core 數據庫上下文 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程

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

ont code () entity clr stat hello 種類 刪除

原文: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類中,我們定義了 AddGetGetAll 三個方法

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

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

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