本文章是根據 微軟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