上一章节中我们了解了 Entity Framework 并讲述了如何配置它. 本章节我们就来学习如何使用它
EF 框架 ( Entity Framework ) 使我们能够使用称为实体 ( Entity) 的公共语言运行时 ( CLR ) 对象查询, 插入, 更新和删除数据
EF 框架将模型中定义的实体和关系映射到数据库. 除此之外, 它还具有以下能力:
将从数据库返回的数据实体化为实体对象
跟踪我们对实体对象所做的更改
并发处理特性
将对象的更改更新到数据库
将对象绑定到控件
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 三个方法
Add 方法向上下文添加一个新的员工对象, 然后再保存更改.
Get 方法根据 ID 返回一个员工
GetAll 方法返回数据库中所有员工的列表
好了, 本小节就到这里结束吧, 我们下一章节再将如何配置 EF 框架服务
来源: http://www.bubuko.com/infodetail-3106359.html