zoukankan      html  css  js  c++  java
  • 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 框架服务

    尝试,尝试,再尝试
  • 相关阅读:
    PAT (Advanced Level) Practice 1055 The World's Richest (25 分) (结构体排序)
    PAT (Advanced Level) Practice 1036 Boys vs Girls (25 分)
    PAT (Advanced Level) Practice 1028 List Sorting (25 分) (自定义排序)
    PAT (Advanced Level) Practice 1035 Password (20 分)
    PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) (进制转换,回文数)
    PAT (Advanced Level) Practice 1120 Friend Numbers (20 分) (set)
    从零开始吧
    Python GUI编程(TKinter)(简易计算器)
    PAT 基础编程题目集 6-7 统计某类完全平方数 (20 分)
    PAT (Advanced Level) Practice 1152 Google Recruitment (20 分)
  • 原文地址:https://www.cnblogs.com/jiejiehencool/p/11100963.html
Copyright © 2011-2022 走看看