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 框架服务

    尝试,尝试,再尝试
  • 相关阅读:
    fastjson报错 java.lang.StackOverflowError
    关于mybatis使用foreach插入速度较慢的问题
    selectKey返回查询的LAST_INSERT_ID的总是1
    使用java制作https证书
    cf 809
    多校 2009 3
    多校 2009 2
    多校 2009 1
    codeforces 808
    hdu 4734 数位DP
  • 原文地址:https://www.cnblogs.com/jiejiehencool/p/11100963.html
Copyright © 2011-2022 走看看