在本系列的 上一篇文章 中,我们介绍了 Controller 类及相关的注解,比如 Router, ApiController 等,并演示了如何构建自己的 Web API。本文将继续完善示例,演示如何在 Controller 中存取数据库。
在.NET Core 中,存取数据库最简单的方法就是使用 Entity Framework Core。 Entity Framework Core(简称: EF Core) 是.NET Core 中 O/RM 的具体实现,使用它可以极大的简化数据库应用的开发,提高开发效率。
建立 DbContext
DbContext 是一个和数据库进行会话的类,它封装了对针对数据库包含的表的CRUD相关操作,是 EF Core 的一个核心类。使用DbContext 可以完成以下一些操作:
- 管理数据库连接
- 配置实体和实体间的关系
- 查询数据库中的数据
- 保存数据到数据库中
- 变化跟踪
- 缓存
- 事务管理
安装 EntityFrameworkCore
要使用 , 需要先在项目中增加对它的依赖,执行以下命令:
1 | dotnet add package Microsoft.EntityFrameworkCore --version 3.1.4 |
系统安装:
1 | 正在确定要还原的项目… |
使用 EntityFrameworkCore
在本示中,我们这样定义 DbContext
1 | namespace TodoApi.Dao |
可以看到在 TodoConetext 中,定义了一个 DbSet
注册 TodoContext
要在 Web API 中使用 DbContext, 最简单的方法就是把 DbContext 注册到 IServiceCollection 中。
打开项目根目录中的 Startup.cs 文件,在 ConfigureServices 中增加注册 DbContext 的代码:
1 | public void ConfigureServices(IServiceCollection services) |
第3,4行是新增的注册 TodoContext 的代码。这里我们使用了内存数据库,也可以换成其它类型的数据库,比如: MS SQL Server, MySQL 等。
在本教程中,使用内存数据库,因此需要首先安装 UseInMemoryDatabase 包,执行:
1 | dotnet add package Microsoft.EntityFrameworkCore.InMemory --version 3.1.4 |
修改 Web API
在 Controller 中,需要做以下一些修改:
- 增加一个TodoContext的属性,以便于在类中其它方法中调用。
1 | private readonly TodoContext _context; |
- 修改 TodoController 的构造方法,使用 .NET Core 中的依赖注入,在构造方法中将 TodoContext 的实例注入到类中:
1 | public TodoController(TodoContext context) |
- 为了演示查询的效果,我们在构造方法中构造一条 Todo 的数据。
1 | if (_context.Todos.Count() == 0) |
- 最后,修改 Get 方法。在上一篇文章中,使用自己构造的数组作为返回值
1 | [ ] |
现在,我们将这段代码改为查询数据库返回结果
1 | [ ] |
修改完毕,执行 dotnet run 以运行程序,打开浏览器,访问 https://localhost:5001/api/todo, 可以看到我们初始插入数据库的数据被查询出来。
1 | [{"id":1,"title":"task1","desc":"description for task1","isComplete":false}] |
最后,附上修改后 TodoController 的完整代码,便于学员对比
1 | namespace TodoApi.Controllers |
下一步
下一步,将演示如何处理 Web API 中的参数。