ASP.NET Core 数据库上下文 - ASP.NET Core 基础教程 - 简单教程,简单编程-阿里云开发者社区

开发者社区> 杰克.陈> 正文

ASP.NET Core 数据库上下文 - ASP.NET Core 基础教程 - 简单教程,简单编程

简介: 原文:ASP.NET Core 数据库上下文 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 数据库上下文 上一章节中我们了解了 Entity Framework 并讲述了如何配置它。
+关注继续查看

原文: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 生命周期 – ASP.NET 上下文对象(五)
ASP.NET 上下文对象 ASP.NET 提供了一系列对象用来给当前请求,将要返回到客户端的响应,以及 Web 应用本身提供上下文信息。间接的,这些上下文对象也可以用来回去核心 ASP.NET 框架特性。
790 0
Shell常用命令教程
1.打印当前目录 命令:pwd pwd命令图示.png 2.获取当前计算机的名称 命令:hostname hostname命令图示.png Win10修改计算机名称的方法: 修改计算机名称1.png 修改计算机名称2.png 修改计算机名称3.png 完成上面3步之后,多次点击确定并重启电脑就可以完成修改计算机名。
800 0
.NET数据库编程求索之路--9.使用EF实现
9.使用EF实现   源码下载: /Files/SummerRain/NetDbDevRoad/9使用EF实现1自动ORM简单三层.rar /Files/SummerRain/NetDbDevRoad/9使用EF实现2自动纯POCO代理简单三层.
646 0
.NET数据库编程求索之路--10.使用EF实现(划分输入验证层)
10.使用EF实现(划分输入验证层) 注:使用partial类来实现输入验证逻辑的分层。   源码下载: /Files/SummerRain/NetDbDevRoad/a使用EF实现4划分输入验证层.
566 0
Java网络编程--InetAdress类
一、地址 java.net包中的InetAddress 类对象含有一个Internet主机地址的域名和Ip地址 www.sina.com.cn/202.108.35.210   二、获取地址 1、获取Internet上主机的地址 使用InetAddress类的静态方法 getByName...
604 0
【转】BarTender与ASP.NET的集成小结(条码标签打印编程)
话说自从上次发了篇NHibernate的资料后,好久没有写东西了,半年来一直在忙一个项目,做完项目后,发现很多东西虽然当时做了,懂了,但是很快就会模糊了,于是又再想起总结的重要性~~没啥地方好放资料的,放在博客园也是一个不错的选择~~   本人也是新手,写的不好的地方,请多原谅。
1826 0
Json.Net系列教程 3.Json.Net序列化和反序列化设置
原文 Json.Net系列教程 3.Json.Net序列化和反序列化设置 上节补充 首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和NHibernate的.
759 0
.NET数据库编程求索之路--7.使用ADO.NET实现(工厂模式-实现多数据库切换)(4)
7.使用ADO.NET实现(工厂模式-实现多数据库切换)(4) 7.7 业务逻辑层HomeShop.BLL OrderBiz.cs View Code  1 using System; 2 using System.
754 0
+关注
杰克.陈
一个安静的程序猿~
9798
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载