本文章是根據 微軟MVP solenovex(楊旭)老師的視頻教程撰寫而來,再加上自己的一些理解,
視頻教程地址:https://www.bilibili.com/video/BV1xa4y1v7rR
GitHub原始碼:https://github.com/hllive/LearnEFCore3.1
1、建構式注入DbContext
首先要與資料庫進行互動的話,需要使用到AppDbContext這個類,需要在WebApi專案中控制器的建構式注入DbContext

2、添加資料
然后添加一條資料,先new一個League,把這個物件添加到DbContext中,通過把物件添加到add()方法就可以了,這樣就會被context進行變化追蹤,但是還沒有與資料庫任何的互動,只不過是contact對它進行變化追蹤,所以它的狀態是新添加的,
什么時候與資料庫互動呢?也就是什么時候執行SQL陳述句呢?就是在呼叫_dbContext.SaveChanges()方法的時候,會檢查它所有追蹤物件的一些狀態,有一些物件可能是新增的,有一些物件可能是修改了,有一些物件可能洗掉了,然后SaveChanges()就在同一個事務里針對物件發生了那些變化,執行相應的SQL陳述句,如果有一個事務失敗,然后整體性地回滾,如果執行成功的話會回傳一個影響的行數,
只有執行到SaveChanges()陳述句才真正生成SQL陳述句執行資料庫操作

3、監聽SQL執行陳述句
為了能查看執行生成的SQL陳述句,可以通SSMS的SQL Server Profiler工具監聽SQL執行陳述句

4、運行效果
運行WebApi專案[圖1],通過Postman執行post請求[圖2],在SQL Server Profiler工具監聽SQL到的sql陳述句[圖3]



5、批量插入
1、批量插入相同類的方法有兩種
[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);
}
2、插入兩個或多個不同的類,直接在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腳本

博客文章可以轉載,但不可以宣告為原創
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/70.html
