EF Core基本使用

EF框架

组件下载

特点

1.DBFirst:数据库优先,从数据库生成Class

2.CodeFirst:代码优先,由实体类生成数据库表结构

3.ModelFirst:模型优先,通过数据库可视化设计器设计数据库,同时生成实体类

CodeFirst

  1. 建立数据模型
复制代码
 [Table("AccountInfo")]//定义表名
 public class AccountInfo
 {
     [Key]//主键自增
     public int AccountId { get; set; }
 ​
     public int Name { get; set; }
 ​
     public int Account { get; set; }
 ​
     public int Password { get; set; }
 }

架构缺失

复制代码
 https://json.schemastore.org/appsettings.json

2.appsettings.json中配置连接字符串

复制代码
 {
   "Logging": {
     "LogLevel": {
       "Default": "Information",
       "Microsoft.AspNetCore": "Warning"
     }
   },
   "AllowedHosts": "*",
   "ConnectionStrings": { "ConnStr": "server=LAPTOP-F352TNCB\\SQLEXPRESS;uid=sa;pwd=123456;database=DailyApp" }
 }

3.编写数据库上下文类

复制代码
 /// <summary>
 /// 数据上下文
 /// </summary>
 public class DailyDbContext:DbContext
 {
     public DailyDbContext(DbContextOptions<DailyDbContext> options): base(options)
     {
 ​
     }
 ​
     /// <summary>
     /// 账户
     /// </summary>
     public virtual DbSet<AccountInfo> AccountInfo { get; set; }
 ​
 ​
 }

4.Program中配置注册数据库上下文

复制代码
 builder.Services.AddDbContext<DailyDbContext>(m => m.UseSqlServer(builder.Configuration.GetConnectionString("ConnStr")));

迁移命令

1.点击程序包管理控制台

2.输入两行命令

复制代码
 add-migration liubei
复制代码
 //报错请检查连接字符串是否正确
 update-database

实际运用dbcontext

复制代码
 [Route("api/[controller]/[action]")]
 [ApiController]
 public class AccountController : ControllerBase
 {
     /// <summary>
     /// 数据库上下文
     /// </summary>
     private readonly DailyDbContext db;
 ​
     private readonly IMapper mapper;
 ​
     /// <summary>
     /// 构造函数
     /// </summary>
     /// <param name="db"></param>
     public AccountController(DailyDbContext _db,IMapper _mapper)
     {
         db = _db;
         mapper= _mapper;
     }
 ​
     [HttpPost]
     public IActionResult Reg(AccountinfoDTO accountinfoDTO)
     {
         ApiResponse res=new ApiResponse();
         //业务
         try
         {
             //账号是否存在(没考虑高并发)
             var dbAccount=db.AccountInfo.Where(t => t.Account == accountinfoDTO.Account).FirstOrDefault();
             if (dbAccount != null)
             {
                 res.ResultCode = -1;
                 res.Msg = "对不起,账号被注册";
                 return Ok(res);
             }
             //如果不存在添加账号
             //AccountInfo accountInfo=new AccountInfo() { Name= accountinfoDTO.Name,Account= accountinfoDTO.Account,Password=accountinfoDTO.Password };
             AccountInfo accountInfo =mapper.Map<AccountInfo>(accountinfoDTO);
             db.AccountInfo.Add(accountInfo);
             //保存受影响行数
             int result = db.SaveChanges();
             if (result == 1)
             {
                 res.ResultCode = 1;
                 res.Msg = "注册成功";
             }
             else
             {
                 res.ResultCode = -99;
                 res.Msg = "注册失败";
             }
         }
         catch (Exception)
         {
             res.ResultCode = -99;
             res.Msg = "异常";
         }
         return Ok(res);
     }
 ​
     [HttpGet]
     public IActionResult Login(string account,string password)
     {
         ApiResponse apiResponse = new ApiResponse();
         try
         {
             var dbAccount = db.AccountInfo.Where(t => t.Account == account && t.Password == password).FirstOrDefault();
             if (dbAccount == null)
             {
                 apiResponse.ResultCode = -1;
                 apiResponse.Msg = "登陆失败,账号或密码错误";
                 return Ok(apiResponse);
             }
             apiResponse.ResultCode = 1;
             apiResponse.Msg = "登陆成功";
             apiResponse.ResultData = dbAccount;
             return Ok(apiResponse);
         }
         catch (Exception)
         {
 ​
             apiResponse.ResultCode = -99;
             apiResponse.Msg = "登陆失败,异常";
             return Ok(apiResponse);
         }
   
     }
 }
相关推荐
阳光九叶草LXGZXJ8 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
字节渡客9 小时前
Redis键明明过期了,业务还在读到旧数据
数据库·redis·spring
爱吃奥利奥_wen10 小时前
面向对象三板斧:封装、继承、多态,到底在“装“什么、“承“什么、“变“什么?
开发语言·经验分享·c#
OnlineProxy11 小时前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
辻弋20112 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
可乐鸡翅yeah_13 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
石头麻辣鱼13 小时前
Bamboo 调度系统 OceanBase 适配实战:存储过程迁移踩过的三个大坑
数据库
龙亘川14 小时前
数智驱动民政升级 精准守护民生保障
大数据·数据库·人工智能
念何架构之路14 小时前
zap扩展生态与总结
java·前端·数据库
晚安日记wanna15 小时前
MySQL 回表为什么这么慢?5 种优化手段逐个拆解
数据库·mysql·性能优化