原文: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 基础教程 - 简单教程,简单编程的更多相关文章

  1. Asp.net Mvc 数据库上下文初始化器

    在Asp.net Mvc 和Entity FrameWork程序中,如果数据库不存在,EF默认的行为是新建一个数据库.如果模型类与已有的数据库不匹配的时候,会抛出一个异常. 通过指定数据库上下文对象初 ...

  2. ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作

    前言: 本章主要通过一个完整的示例讲解ASP.NET Core MVC+EF Core对MySQL数据库进行简单的CRUD操作,希望能够为刚入门.NET Core的小伙伴们提供一个完整的参考实例.关于 ...

  3. ASP.NET MVC 数据库依赖缓存

    ASP.NET MVC 数据库依赖缓存   问题背景 最近做一个非常简单的功能,就是使用ajax请求的方式从服务端请求一段下拉表的数据. 以前也有做过这个功能,只不过这次做这个功能的时候冒出了一个想法 ...

  4. ASP.NET Core EFCore 之DBFirst 自动创建实体类和数据库上下文

    通过引用Nuget包添加实体类 运行 Install-Package Microsoft.EntityFrameworkCore.SqlServer 运行 Install-Package Micros ...

  5. ASP.NET Core 使用 SQLite 教程,EF SQLite教程,修改模型更新数据库,适合初学者看懂详细、简单教程

    SQLIte 操作方便,简单小巧,这里笔者就不再过多介绍,感兴趣可以到以下博文 https://blog.csdn.net/qq_31930499/article/details/80420246 文 ...

  6. Asp.Net Core 2.0 项目实战(4)ADO.NET操作数据库封装、 EF Core操作及实例

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  7. ASP.NET Core 设置和初始化数据库 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 设置和初始化数据库 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 设置和初始化数据库 上一章节中我们已经设置和配置好了 EF ...

  8. Working with Data » 使用Visual Studio开发ASP.NET Core MVC and Entity Framework Core初学者教程

    原文地址:https://docs.asp.net/en/latest/data/ef-mvc/intro.html The Contoso University sample web applica ...

  9. 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序

    使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻 ...

随机推荐

  1. CISCO - 查找命令行

    http://www.cisco.com/c/en/us/support/web/tools/help/command_search_best_practices.html Support Best ...

  2. 【C++竞赛 G】Lines

    Time Limit: 3s Memory Limit: 64MB 问题描述 Ljr has several lines. The lines are covered on the X axis. L ...

  3. java基本类型(内置类型)取值范围

    例1: public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.pri ...

  4. php实现数组中的逆序对(归并排序实现:排序 辅助数组)

    php实现数组中的逆序对(归并排序实现:排序 辅助数组) 一.总结 这题用归并排序  线段树   树状数组 等操作的复杂度应该都是小于n方的 二.php实现数组中的逆序对 题目描述 在数组中的两个数字 ...

  5. Java 8新特性探究(十一)Base64详解

    开发十年,就只剩下这套架构体系了! >>>   BASE64 编码是一种常用的字符编码,在很多地方都会用到.但base64不是安全领域下的加密解密算法.能起到安全作用的效果很差,而且 ...

  6. [CortexM0--stm32f0308]Option Byte

    问题描写叙述 option byte,算是IC中比較简单的功能,就是用户能够写入数据,对IC的某些功能进行配置.而IC在reset时,会载入当中的内容,进行推断,从而使用户的配置生效. option ...

  7. apt-get install安装软件时出现依赖错误解决方式

    在使用apt-get install安装软件时,常常会遇到如上图所看到的错误.该错误的意思为缺少依赖软件.解决方式为: aptitude install golang-go

  8. 【物理】概念的理解 —— Phase(相位)

    Phase is the position of a point in time (an instant) on a waveform cycle. 相位指的是波形周期中点在某一时刻的位置.Phase ...

  9. python 爬取bilibili 视频弹幕

    # -*- coding: utf-8 -*- # @author: Tele # @Time : 2019/04/09 下午 4:50 # 爬取弹幕 import requests import j ...

  10. Spark修炼之道(基础篇)——Linux大数据开发基础:第三节:用户和组

    本节主要内容 理解用户和组的概念 用户管理 组管理 权限分配 1. 理解用户和组的概念 在第一讲中我们提到.linux是一种多任务.多用户的操作系统,在讲ls -l命令行我们看到例如以下文件具体信息: ...