还是想问下关于EntityFramework

-一个大坑 2019-09-11 02:19:02
虽然准备用FreeSql,不过有个问题没搞懂
ef说是循环插入,那么
_dbContext.Set<T>().AddRange(List1);
_dbContext.Set<T>().AddRange(List2);
_dbContext.SaveChanges();
这种同时保存是怎么做到的
假如list2数据有问题,list已经保存了,如果是循环保存怎么做到同时保存成功或失败的?
...全文
147 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
-一个大坑 2019-09-11
  • 打赏
  • 举报
回复
引用 11 楼 github_36000833 的回复:
[quote=引用 7 楼 -一个大坑 的回复:] ... 那么还是不是循环一条条插入?我用收费版的测试,速度的确快很多
SaveChanges() { 开始默认级别事务 { 一条条插入... } 提交事务 } 这伪代码是否能解释你的疑问“如果是循环保存怎么做到同时保存成功或失败的?”[/quote] 也就是说list就是循环添加一个个SQL到事务里,和我自己写的事务差不多,我也是循环添加到事务里 我还以为会打开数据库,插入数据,保存,关闭这样操作的
github_36000833 2019-09-11
  • 打赏
  • 举报
回复
引用 7 楼 -一个大坑 的回复:
... 那么还是不是循环一条条插入?我用收费版的测试,速度的确快很多
SaveChanges() { 开始默认级别事务 { 一条条插入... } 提交事务 } 这伪代码是否能解释你的疑问“如果是循环保存怎么做到同时保存成功或失败的?”
-一个大坑 2019-09-11
  • 打赏
  • 举报
回复
引用 8 楼 wanghui0380 的回复:
你上个帖子不是一种在纠结“跟踪”么 每条数据在一个context里都有“行状态跟踪”,所以你就别纠结了。 你无论加多少条,他的行状态都是added 其实也根本就不存在你说的,循环批次这种说法。因为对于EF来说,_dbContext.SaveChanges();永远都是 一批一批保存。 删掉行状态时delete的,添加行状态是add的,更新行状态是modified的
跟踪的目前用着没问题就先用着,反正也搞不明白,就不纠结了
wanghui0380 2019-09-11
  • 打赏
  • 举报
回复
dbContext.Set<T>().AddRange(List1);
_dbContext.Set<T>().AddRange(List2);
所以,根本就不存在你说的所谓 list1成功,list2失败,因为单单这两句,他就压根不会往数据库里提交 他只是在本地context里加入了数据,并且加入的数据行状态是add
wanghui0380 2019-09-11
  • 打赏
  • 举报
回复
你上个帖子不是一种在纠结“跟踪”么 每条数据在一个context里都有“行状态跟踪”,所以你就别纠结了。 你无论加多少条,他的行状态都是added 其实也根本就不存在你说的,循环批次这种说法。因为对于EF来说,_dbContext.SaveChanges();永远都是 一批一批保存。 删掉行状态时delete的,添加行状态是add的,更新行状态是modified的
-一个大坑 2019-09-11
  • 打赏
  • 举报
回复
引用 5 楼 github_36000833 的回复:
EntityFramework执行SaveChanges时,会默认包在一个ReadCommitted级别的事务中执行。 具体可参考(小心中文版非常糟糕): 【EntityFramework事务】 https://docs.microsoft.com/zh-cn/ef/ef6/saving/transactions 【Working with Transactions】 https://docs.microsoft.com/en-us/ef/ef6/saving/transactions
那么还是不是循环一条条插入?我用收费版的测试,速度的确快很多
-一个大坑 2019-09-11
  • 打赏
  • 举报
回复
引用 4 楼 楠小南 的回复:
谁跟你说 AddRange 会不停开关数据库的?
EntityFramework说是会循环一条条插入
github_36000833 2019-09-11
  • 打赏
  • 举报
回复
EntityFramework执行SaveChanges时,会默认包在一个ReadCommitted级别的事务中执行。 具体可参考(小心中文版非常糟糕): 【EntityFramework事务】 https://docs.microsoft.com/zh-cn/ef/ef6/saving/transactions 【Working with Transactions】 https://docs.microsoft.com/en-us/ef/ef6/saving/transactions
楠小南 2019-09-11
  • 打赏
  • 举报
回复
引用 3 楼 -一个大坑 的回复:
[quote=引用 1 楼 正怒月神 的回复:]
你可以做事务呀,
transactionscope

我就是奇怪,一般批量保存一起成功或失败是事务效果,
EntityFramework说是循环插入,会一直打开关闭数据消耗资源,那是怎么做到事务效果的[/quote]

谁跟你说 AddRange 会不停开关数据库的?
-一个大坑 2019-09-11
  • 打赏
  • 举报
回复
引用 1 楼 正怒月神 的回复:
你可以做事务呀, transactionscope
我就是奇怪,一般批量保存一起成功或失败是事务效果, EntityFramework说是循环插入,会一直打开关闭数据消耗资源,那是怎么做到事务效果的
-一个大坑 2019-09-11
  • 打赏
  • 举报
回复
测试2w笔数据插入 EntityFramework 24s EntityFramework.Extensions 4s SqlBulkCopy 0.7s
正怒月神 版主 2019-09-11
  • 打赏
  • 举报
回复
你可以做事务呀, transactionscope

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧