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:转载请注明来源 https://www.cnblogs.com/sunshine-wy,疑问和勘误可在下方留言。