
.NetCore3.1使用CodeFirst并查询数据
本文为小白简洁教程,前端玩多了后端基本的忘了,所以做个笔记!
源码已上传,有需要可自行到这里去下载
目录
正文
Code first
创建项目
1.创建一个WebApi项目并且命名为
TodoApi
2.在该项目右键新建一个文件夹名为Module
,主要放实现类,
创建TodoContext
,UserInfo
,UserInfoProcess
三个类
2.在该项目右键新建一个文件夹名为Interface
,主要接口类
创建IUserInfo
接口类
下载NuGet包
- 下载并引入需要用到的包:可通过控制台或直接搜索安装
- Microsoft.EntityFrameworkCore //EFCore框架
- Microsoft.EntityFrameworkCore.SqlServer //连接SQLserver依赖
- Microsoft.EntityFrameworkCore.Tools //工具包(数据迁移等)
- Microsoft.EntityFrameworkCore.Design //数据库上下文
添加实体
在UserInfo.cs
中创建一些字段,与数据库表对应的字段
- 特性说明
[Table("UserTable")]
:用于映射数据库的表名,这里映射的表名为”UserTable”,可与实体名不一致[Key]
映射数据库主键
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
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
资源文件中新增根节点数据库连接字符串- {
- "ConnectionStrings": {
- "UserDB": "server=127.0.0.1;database=UserDB;uid=sa;pwd=1233456;"
- }
- }
- 配置连接字符串后在
Startup.cs
服务启动入口类ConfigureServices
方法中获取连接字符串并添加注入上下文- // 获取连接字符串
- string sqlstr = Configuration.GetConnectionString("UserDB");
- // 注入上下文
- services.AddDbContext<TodoContext>(option => option.UseSqlServer(sqlstr));
生成数据
这Code First基本完成
通过 工具>>NuGet包管理器>>程序包管理器控制台 打开控制台
- 给迁移搭建基架,运行:
Add-Migration InitialCreate
命令,InitialCreate自定义名
搭建基架成功后会生成一个文件夹里的基架代码(执行完第二步迁移后可删掉) - 将新迁移数据创建数据库,运行:
Update-Database
迁移成功数据库会生成一个历史表(可删掉)
可在SQL server客户端查看是否创建成功
后续测试
添加接口并实现接口执行数据访问的业务类
- 这时候用到
IUserInfo.cs
了,这个接口带一个泛型,在里面写一个简单的获取用户数据的方法
/// <summary>
/// 用户业务逻辑层接口
/// </summary>
interface IUserInfo<T>
{
/// <summary>
/// 获取用户信息
/// </summary>
List<T> getUserInfos();
}
- 实现接口,
UserInfoProcess.cs
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
空的控制器,控制器代码:
[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;
}
}
- 选择控制台调试会更方便
禁用浏览器调试 - 运行程序
通过postman请求后发现报错
错误原因:没有依赖注入UserInfoProcess.cs
解决方案:在Startup.cs
中注入UserInfoProcess.cs
//依赖注入
services.AddTransient<UserInfoProcess>();
添加后再次运行测试,这时候发现成功,在UserInfoProcess.cs
中设置断点查看数据
这样子就基本完成codefrist的基本操作
后言
工作中做的项目到底有多大也不能忘了最基础的东西,此文当作一个复习,希望可以帮到小白!
评价
排名
40
文章
11
粉丝
3
评论
0
申请别的接口数据(网络接口)
剑轩 :
哇,小姐姐
申请别的接口数据(网络接口)
是伍尚金哇 :
敲一夜代码,流下两三行泪水,掏空四肢五体,六杯白开水七桶泡面
mui框架-移动端跳转以及传值的简单方法(修改解决方法)
剑轩 : 厉害厉害!
mui框架-移动端跳转以及传值的简单方法(修改解决方法)
是伍尚金哇 :
测试了 可以直接在
extras: {
userid:'10'
//自定义扩展...
数据库的varchar和nvarchar的区别
是伍尚金哇 : 没人看 自己看一个 温习一下
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术
Session
剑轩
很有深度!
心酸