c# - Entity Framework Core 的删除查询速度明显较慢
问题描述
我在使用 EF Core 的主要基础上删除一行,执行时间超过 1 秒,否则只需创建一个删除命令大约需要 400 毫秒。
我正在使用 Mysql 数据库。
直接使用 Mysql 删除一行只需 140 毫秒。
为什么EF这么慢?
using (DBContex db = new DbContext())
{
var revenueModel = db.Revenue.Where(x => x.Id == id).FirstOrDefault();
if (revenueModel != null)
{
db.MSRevenues.Remove(revenueModel);
result = await db.SaveChangesAsync();
}
}
解决方案
EF Core 旨在仅通过 Change Tracker 修改数据库。这种设计使生活更轻松,但减慢了简单的操作。通常您必须选择实体,进行修改/删除和SaveChanges
. 这是两次数据库往返,加上查询翻译的时间。
无论如何,对于这种简单的情况,您可以通过简单的技巧删除一次往返:
_context.MSRevenues.Remove(new MSRevenue() { Id = id });
result = await db.SaveChangesAsync();
推荐阅读
- spring-batch - 如何为 spring-batch-integration 编写集成测试?
- sql - 删除源表中某个 ID 的所有记录后使用触发器删除记录
- python - Python在字符串中的特殊字符存储不一致
- java - 休眠:实体只有 EmbeddedId 时未获取数据
- java - 无法启动 H2O 上下文以与 R 中的 Spark 交互
- css - 溢出-x:自动导致下面的额外空间?
- javascript - 如何在 JavaScript 代码中使用 JMeter 变量?
- bulk - 反应管理员:访问
- 来自 bulkActions 的记录
- java - 我想通过 Java 访问 rundeck 并获取失败的作业列表并重新启动它们
- .net - 如何通过名称找到 Unicode 字符?