四、Entity Framework Core 3.1入門教程-添加數據

本文章是根據 微軟MVP solenovex(楊旭)老師的視頻教程編寫而來,再加上本身的一些理解。
視頻教程地址:https://www.bilibili.com/video/BV1xa4y1v7rR
GitHub源碼:https://github.com/hllive/LearnEFCore3.1git

一、構造函數注入DbContext

首先要與數據庫進行交互的話,須要使用到AppDbContext這個類,須要在WebApi項目中控制器的構造函數注入DbContext
github

二、添加數據

而後添加一條數據,先new一個League,把這個對象添加到DbContext中,經過把對象添加到add()方法就能夠了,這樣就會被context進行變化追蹤,可是尚未與數據庫任何的交互,只不過是contact對它進行變化追蹤,因此它的狀態是新添加的。
何時與數據庫交互呢?也就是何時執行SQL語句呢?就是在調用_dbContext.SaveChanges()方法的時候,會檢查它全部追蹤對象的一些狀態,有一些對象多是新增的,有一些對象多是修改了,有一些對象可能刪除了,而後SaveChanges()就在同一個事務裏針對對象發生了那些變化,執行相應的SQL語句,若是有一個事務失敗,而後總體性地回滾,若是執行成功的話會返回一個影響的行數。
只有執行到SaveChanges()語句才真正生成SQL語句執行數據庫操做
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

相關文章
相關標籤/搜索