gpt4 book ai didi

c# - Entity Framework 不提供 DeleteAsync 或 AddAsync。为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 23:02:58 24 4
gpt4 key购买 nike

我刚刚注意到 EF(此处使用版本 5)不提供 DeleteAsync()/AddAsync()。我还注意到像这样的项目:

https://github.com/zzzprojects/EntityFramework-Plus

请事后提供 DeleteAsync()。为什么 EF 不提供开箱即用的 DeleteAsync()?只是好奇。

附录:正如 EF-Plus 的维护者所指出的,我提到的“DeleteAsync”风格与 EF 的“Delete”/“DeleteAsync”有些不同,因为前者在查询目标元素上运行 在数据库/数据库服务器上进行匹配,而 EF 的 Delete 对在调用“Delete()”之前已经检索到的元素进行操作。尽管这些方法的签名存在差异,但我的问题最初引起的关注仍然是有道理的。

最佳答案

在观看了 MattJohnson 提供的非常有启发性的 Material 并使用反射探究了 Delete 的实现之后,我推测未提供 DeleteAsync() 背后的原因是删除导致数据库在单个单元内发生更改-工作实例生命周期。

如果有人通过 Task.Run() 提供了“DeleteAsync()”操作(又名没有真正的异步实现),这实际上会通过反-从某种意义上说,开发人员会使用这种 API 并认为他们享受“真正异步”的好处,但实际上他们不会 - 他们只会遭受不必要的“等待任务”开销。 Run(() => context.Foo.Delete(x))' 没有享受任何好处。

TL;DR:关于为什么 EF 的人们不提供“DeleteAsync()”/“AddAsync()”的底线解释是“异步方法不应该说谎”(正如 MattJohnson 指出的那样)和“DeleteAsync”考虑到撰写本文时 EF 的当前实现,()'/'AddAsync()' 肯定会说谎。

关于c# - Entity Framework 不提供 DeleteAsync 或 AddAsync。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42422656/

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