本文章是根据 微软MVP solenovex(杨旭)老师的视频教程编写而来,再加上本身的一些理解。
视频教程地址:https://www.bilibili.com/video/BV1xa4y1v7rR
GitHub源码:https://github.com/hllive/LearnEFCore3.1git
首先要与数据库进行交互的话,须要使用到AppDbContext这个类,须要在WebApi项目中控制器的构造函数注入DbContext
github
而后添加一条数据,先new一个League,把这个对象添加到DbContext中,经过把对象添加到add()方法就能够了,这样就会被context进行变化追踪,可是尚未与数据库任何的交互,只不过是contact对它进行变化追踪,因此它的状态是新添加的。
何时与数据库交互呢?也就是何时执行SQL语句呢?就是在调用_dbContext.SaveChanges()方法的时候,会检查它全部追踪对象的一些状态,有一些对象多是新增的,有一些对象多是修改了,有一些对象可能删除了,而后SaveChanges()就在同一个事务里针对对象发生了那些变化,执行相应的SQL语句,若是有一个事务失败,而后总体性地回滚,若是执行成功的话会返回一个影响的行数。
只有执行到SaveChanges()语句才真正生成SQL语句执行数据库操做
sql
为了能查看执行生成的SQL语句,能够通SSMS的SQL Server Profiler工具监听SQL执行语句
数据库
运行WebApi项目[图1],经过Postman执行post请求[图2],在SQL Server Profiler工具监听SQL到的sql语句[图3]
ide
一、批量插入相同类的方法有两种函数
[HttpPost] public IActionResult SaveLeague() { var league1 = new League() { Country = "中国", Name = "第一季度足球联赛" }; var league2 = new League() { Country = "俄罗斯", Name = "第二冬季足球联赛" }; //第一种批量插入League,用params参数形式 _dbContext.Leagues.AddRange(league1,league2); //第二种批量插入League,使用集合 _dbContext.Leagues.AddRange(new List<League> { league1, league2 }); var count = _dbContext.SaveChanges(); return Ok(count); }
二、插入两个或多个不一样的类,直接在Context上执行AddRange()方法工具
[HttpPost] public IActionResult SaveLeague() { var league1 = new League() { Country = "中国", Name = "第一季度足球联赛" }; var league2 = new League() { Country = "俄罗斯", Name = "第二冬季足球联赛" }; ////第一种批量插入League,用params参数形式 //_dbContext.Leagues.AddRange(league1,league2); ////第二种批量插入League,使用集合 //_dbContext.Leagues.AddRange(new List<League> { league1, league2 }); var club = new Club { Name = "茅台足球队", City = "贵州仁怀", DateOfEstablishment = new System.DateTime(1999, 7, 1), League= league1 }; _dbContext.AddRange(league1, league2, club);//批量插入不一样类 var count = _dbContext.SaveChanges(); return Ok(count); }
执行后监听SQL脚本
post
博客文章能够转载,但不能够声明为原创code