gpt4 book ai didi

c# - EntityFramework 中的 SaveChanges 与异步

转载 作者:太空宇宙 更新时间:2023-11-03 15:36:06 25 4
gpt4 key购买 nike

我们一直在使用 Generic Repo 模式,我看到一些声音称它为反模式,但最好先开始一些事情然后坐下来等待一切完成:-)

场景 1

var placeStatus = await _placeService.AddAsync(oPlace, false); // here false just add to context and don't hit Savechanges
var orgStatus = await _organizationService.AddAsync(oOrganization, false);
_unitOfWork.SaveChanges();

对比

Task<short> placeStatus = _placeService.AddAsync(oPlace, true);
Task<short> orgStatus = _organizationService.AddAsync(oOrganization, true);
await Task.WhenAll(placeTask, orgTask);

以我有限的知识,我假设 SaveChanges() 在第一种情况下在内部维护回滚,而在第二种情况下我将不得不处理回滚。我还假设从 await Task.WhenAll

并行执行

1) SaveChanges() 是并行的吗?或者如果原子性不是问题或问题,那么性能比第二个好,如果我做第二个,我是否在正确的轨道上?

塞纳里奥 2

Task<Place> placeTask= _placeCore.SelectByIdAsync(id);
Task<Organization> organizationTask = _organizationCore.SelectByIdAsync(id);
await Task.WhenAll(placeTask, organizationTask);

任何链接、书籍引用或故事都会有帮助

谢谢

最佳答案

您不能在同一个 DataContext 上并行运行两个查询。如评论中所述,这在当前版本的 EF 中不起作用。您要么需要为特定场景创建单独的数据上下文(这会使代码变得更加复杂,并且在没有明显好处的情况下不应这样做),要么切换到串行查询。

使用 EF 的正确方法是使用非异步、非 SaveChanges 调用 Add/Update/Delete 方法和异步 Select 方法。您的 SaveChanges 应该是异步的并调用 DataContext 的 SaveChangesAsync。 SaveChanges 将批量插入、更新和删除。

关于c# - EntityFramework 中的 SaveChanges 与异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31832689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com