首页 > 解决方案 > 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();
    }
}

标签: c#.netentity-frameworkentity-framework-core

解决方案


EF Core 旨在仅通过 Change Tracker 修改数据库。这种设计使生活更轻松,但减慢了简单的操作。通常您必须选择实体,进行修改/删除和SaveChanges. 这是两次数据库往返,加上查询翻译的时间。

无论如何,对于这种简单的情况,您可以通过简单的技巧删除一次往返:

_context.MSRevenues.Remove(new MSRevenue() { Id = id });
result = await db.SaveChangesAsync();

推荐阅读