zoukankan      html  css  js  c++  java
  • 4、Entity Framework Core 3.1入门教程-添加数据

    本文章是根据 微软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脚本

    博客文章可以转载,但不可以声明为原创

  • 相关阅读:
    Java基础知识面试题(2021年最新版,持续更新...)整理
    windows10 cmd窗口输出卡住(看这篇就够了)
    windows10 powershell窗口输出卡住(看这篇就够了)
    Golang函数相关
    内存对齐详解
    Go编程模式Pipeline
    管道符、重定向与环境变量(Linux就该这么学第三章)
    GMP模型简介
    新手必须掌握的Linux命令(Linux就该这么学第二章)
    Goland运行项目报错:CreateProcess error=216, 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者。
  • 原文地址:https://www.cnblogs.com/hllive/p/13539442.html
Copyright © 2011-2022 走看看