zoukankan      html  css  js  c++  java
  • ef linq方式插入+sql操作数据注意事项

      容易错,便写个博客记一下。

      先看原来的写法:

    db.表1.AddRange(temp);
    db.Database.ExecuteSqlCommand($@"INSERT INTO dbo.表2 ...此处逻辑省略”);
    db.SaveChanges();

      运行后发现数据库没有新增的数据,后发现和执行顺序有关,AddRange只是将表加入到内存,等SaveChange以后才会正式提交入库,而ExecuteSqlCommand是需要表1数据的,这就会导致这一步取不到数,因为还没有提交。

      改完之后的写法:

    db.表.AddRange(temp);
    db.SaveChanges();
    db.Database.ExecuteSqlCommand($@"INSERT INTO dbo.表 ...此处省略”);

      先提交使数据插入到库,再执行了sql命令,sql命令自带提交所以无需再SaveChange。

      PS:顺便再提一点:批量插入数据前如果有校验是否非重复再插入,导致插入慢的,可以建个附表,数据全插入到附表,再通过主表 Not Exists 附表来实现批量插入。这种比程序里foreach循环判断速度快。

    PS:楼主邮箱 tccwpl@163.com
  • 相关阅读:
    牛客练习赛24 E:青蛙(最短路)
    菜根谭#10
    菜根谭#9
    菜根谭#8
    菜根谭#7
    菜根谭#6
    菜根谭#5
    菜根谭#4
    菜根谭#3
    菜根谭#2
  • 原文地址:https://www.cnblogs.com/sunshine-wy/p/14676192.html
Copyright © 2011-2022 走看看