gpt4 book ai didi

c# - 使用 EF Core 防止同步 API 使用

转载 作者:行者123 更新时间:2023-12-04 13:34:56 27 4
gpt4 key购买 nike

如何防止使用 Entity Framework Core 进行同步数据库访问?例如如何确保我们调用的是 ToListAsync() 而不是 ToList()?
我一直试图在对调用同步 API 的方法进行单元测试时抛出异常。是否有配置选项或一些我们可以覆盖的方法来完成这项工作?
我曾尝试使用 DbCommandInterceptor,但在使用内存数据库进行测试时,没有调用任何拦截器方法。

最佳答案

How can I prevent synchronous database access with Entity Framework Core?


你不能。时期。这也没有任何理由。你基本上假设使用你的 API 的程序员要么是白痴要么是恶意的——否则你为什么要阻止他们做一些在他们的语言中合法的事情?

I have tried using a DbCommandInterceptor, but none of the interceptor methods arecalled when testing with an in-memory database


内存数据库存在大量问题。我通常建议不要使用它 - 就像根本一样。除非您更喜欢“可能有效”和“从不实际使用数据库的高级功能”。这是一个死胡同——我们从来没有像这样对 API 进行单元测试,我们所有的单元测试实际上都是集成测试和端到端测试(相对于真正的数据库)。
在内存中严重不能保证在任何非平凡的事情上工作。细节可能是错误的——当问题是内存数据库的行为与真实数据库略有不同时,你最终会编写虚假测试并寻找问题。并且让我们不要讨论您可以对内存中不知道如何开始的真实数据库执行的操作(并且迁移也不包括在内)。部分和过滤索引、索引 View 是无法正确显示的巨大性能工具。并且不会详细讨论字符串比较等内容的差异。
但一般的结论是,阻止用户调用 EfCore 等上的有效方法不是你的工作,而且你真的很不走运——团队永远不会支持这种情况。有时使用同步调用确实有很好的理由 - 在某些情况下,异步处理似乎正在崩溃。我有一些拦截器(在 http 堆栈中),其中异步调用不起作用。就像永远不会回来一样。我从来没有尝试过在那里工作 - 所以我在必要时会同步调用(谢天谢地,我在那里有大量的缓存)。

关于c# - 使用 EF Core 防止同步 API 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62752224/

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