4.Entity Framework Core 5.0 添加数据

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脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值