原文: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. java实现微信支付宝等多个支付平台合一的二维码支付(maven+spring springmvc mybatis框架)

    首先申明,本人实现微信支付宝等支付平台合多为一的二维码支付,并且实现有效时间内支付有效,本人采用的框架是spring springmvc mybatis 框架,maven管理.其实如果支付,不需要my ...

  2. php实现删除链表中重复的节点

    php实现删除链表中重复的节点 一.总结 二.php实现删除链表中重复的节点 题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1 ...

  3. Lucene学习总结之三:Lucene的索引文件格式(1) 2014-06-25 14:15 1124人阅读 评论(0) 收藏

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...

  4. #import &lt;/usr/include/objc/objc-class.h&gt; not such file or directory问题的解决方法

    近期在使用一些开源的demo,打开后出现这个错误,然后能够把 #import </usr/include/objc/objc-class.h> 改动为以下 #import <objc ...

  5. [Angular] Adding keyboard events to our control value accessor component

    One of the most important thing when building custom form component is adding accessbility support. ...

  6. Python 网络爬虫与信息获取(一)—— requests 库的网络爬虫

    1. 安装与测试 进入 cmd(以管理员权限),使用 pip 工具,pip install requests 进行安装: 基本用法: >> import requests >> ...

  7. 前端切图:一个好看的表格css样式

    <!DOCTYPE html><html>        <head>        <meta charset="UTF-8">  ...

  8. NSURLSession网络接口

    URLSession URLSession NSURLSession是iOS7中新的网络接口,与NSURLConnection是并列的. 当程序在前台时,NSURLSession与NSURLConne ...

  9. 轻松学习JavaScript十八:DOM编程学习之DOM简单介绍

    一DOM概述 DOM(文档对象模型)是HTML和XML的应用程序接口(API).DOM将把整个页面规划成由节点层级构成的文档. DOM描绘了一个层次化的节点树,执行开发者加入,移除和改动页面的某一部分 ...

  10. C#连接Sqlserver代码

    刚开始把数据库的密码搞错了,硬是连不上... //数据库连接类 SqlConnection conn = new SqlConnection("server=.;database=test; ...