首页
视频
资源
登录
原
.NetCore3.1使用CodeFirst并查询数据
3965
人阅读
2020/11/15 12:37
总访问:
287830
评论:
5
收藏:
0
手机
分类:
.net
# .NetCore3.1使用CodeFirst并查询数据 本文为小白简洁教程,前端玩多了后端基本的忘了,所以做个笔记! 源码已上传,有需要可自行[到这里](https://download.tnblog.net/resource/index/bcd3141c4edc422c87b52995dfd935af)去下载 # *目录* > [Code first](#Code first) >> [创建项目](#创建项目) >> [下载NuGet包](#下载NuGet包) >> [添加实体](#添加实体) >> [添加数据库上下文类](#添加数据库上下文类) >> [注入上下文类](#注入上下文类) >> [生成数据](#生成数据) > [后续测试](#后续测试) >> [添加接口并实现接口执行数据访问的业务类](#添加接口并实现接口执行数据访问的业务类) >> [控制器提供开放Api](#控制器提供开放Api) >> [控制器类运行测试](#控制器类运行测试) > [后言](#后言) # 正文 > # Code first > ## 创建项目 > 1.创建一个WebApi项目并且命名为`TodoApi` > 2.在该项目右键新建一个文件夹名为`Module`,主要放实现类, > 创建`TodoContext`,`UserInfo`,`UserInfoProcess`三个类 > 2.在该项目右键新建一个文件夹名为`Interface`,主要接口类 > 创建`IUserInfo`接口类 >![在这里插入图片描述](https://img-blog.csdnimg.cn/20201115110530623.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1OTI4NDA4,size_16,color_FFFFFF,t_70#pic_center) ## 下载NuGet包 - 下载并引入需要用到的包:可通过控制台或直接搜索安装 ```csharp Microsoft.EntityFrameworkCore //EFCore框架 Microsoft.EntityFrameworkCore.SqlServer //连接SQLserver依赖 Microsoft.EntityFrameworkCore.Tools //工具包(数据迁移等) Microsoft.EntityFrameworkCore.Design //数据库上下文 ``` ## 添加实体 在`UserInfo.cs`中创建一些字段,与数据库表对应的字段 - 特性说明 - `[Table("UserTable")]`:用于映射数据库的表名,这里映射的表名为"UserTable",可与实体名不一致 - `[Key]`映射数据库主键 ```csharp using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace TodoApi.Module { [Table("UserTable")] public class UserInfo { [Key] public int Id { get; set; } public string Name { get; set; } public string Password { get; set; } } } ``` ## 添加数据库上下文类 - `TodoContext.cs` ```csharp using Microsoft.EntityFrameworkCore; namespace TodoApi.Module { public class TodoContext : DbContext { public TodoContext(DbContextOptions<TodoContext> options) : base(options) { } public DbSet<UserInfo> UserInfo { get; set; } } } ``` ## 注入上下文类 - 先在项目根目录的`appsettings.json`资源文件中新增根节点数据库连接字符串 ```json { "ConnectionStrings": { "UserDB": "server=127.0.0.1;database=UserDB;uid=sa;pwd=1233456;" } } ``` - 配置连接字符串后在`Startup.cs`服务启动入口类`ConfigureServices`方法中获取连接字符串并添加注入上下文 ```csharp // 获取连接字符串 string sqlstr = Configuration.GetConnectionString("UserDB"); // 注入上下文 services.AddDbContext<TodoContext>(option => option.UseSqlServer(sqlstr)); ``` ## 生成数据 这Code First基本完成 通过 <kbd>工具</kbd>>><kbd>NuGet包管理器</kbd>>><kbd>程序包管理器控制台</kbd> 打开控制台 1. 给迁移搭建基架,运行:`Add-Migration InitialCreate`命令,InitialCreate自定义名 搭建基架成功后会生成一个文件夹里的基架代码(执行完第二步迁移后可删掉) 2. 将新迁移数据创建数据库,运行:`Update-Database` 迁移成功数据库会生成一个历史表(可删掉) 可在SQL server客户端查看是否创建成功 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201115115438705.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1OTI4NDA4,size_16,color_FFFFFF,t_70#pic_center) > # 后续测试 ## 添加接口并实现接口执行数据访问的业务类 1. 这时候用到`IUserInfo.cs`了,这个接口带一个泛型,在里面写一个简单的获取用户数据的方法 ```csharp /// <summary> /// 用户业务逻辑层接口 /// </summary> interface IUserInfo<T> { /// <summary> /// 获取用户信息 /// </summary> List<T> getUserInfos(); } ``` 2. 实现接口,`UserInfoProcess.cs` ```csharp public class UserInfoProcess: IUserInfo<UserInfo> { //依赖注入上下文 private readonly TodoContext _db; public UserInfoProcess(TodoContext todoContext) { _db = todoContext; } public List<UserInfo> getUserInfos() { // 查询id大于5的用户信息 var query = _db.UserInfo.Where (a=>a.Id>5).ToList(); return query; } } ``` # 控制器提供开放Api ## 控制器类运行测试 在`Controllers`文件夹添加一个名为`UserController`空的控制器,控制器代码: ```csharp [Route("api/v1/[controller]")] [ApiController] public class UserController : ControllerBase { //依赖注入 private readonly UserInfoProcess _userprocess; public UserController(UserInfoProcess userprocess) { _userprocess = userprocess; } [HttpGet] [Route("GetUserInfos")] public List<UserInfo> GetUsers() { var query= _userprocess.getUserInfos(); return query; } } ``` - 选择控制台调试会更方便 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201115121047179.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1OTI4NDA4,size_16,color_FFFFFF,t_70#pic_center) 禁用浏览器调试 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020111512114564.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1OTI4NDA4,size_16,color_FFFFFF,t_70#pic_center) - 运行程序 通过postman请求后发现报错 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201115121237624.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1OTI4NDA4,size_16,color_FFFFFF,t_70#pic_center) 错误原因:没有依赖注入`UserInfoProcess.cs` 解决方案:在`Startup.cs`中注入`UserInfoProcess.cs` ```csharp //依赖注入 services.AddTransient<UserInfoProcess>(); ``` 添加后再次运行测试,这时候发现成功,在`UserInfoProcess.cs`中设置断点查看数据 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201115121609790.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1OTI4NDA4,size_16,color_FFFFFF,t_70#pic_center) 这样子就基本完成codefrist的基本操作 # 后言 工作中做的项目到底有多大也不能忘了最基础的东西,此文当作一个复习,希望可以帮到小白!
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
是伍尚金哇_v
不帅~~但是很暖心.....
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net
22篇
数据库
4篇
权限
2篇
前端移动端
2篇
接口相关
2篇
Redis
1篇
微信开发
1篇
ionic
11篇
Angular
9篇
前端
6篇
我的随笔
4篇
安卓开发
1篇
开发工具
3篇
GitHub
2篇
PHP
1篇
更多
硬件
1篇
工作笔记
3篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术