咨询区

  • Zhenia

在 Entity Framework 中,如何快速高效的删除表中的所有行?

我目前是这样写的。


var rows = from o in dataDb.Tableselect o;
foreach (var row in rows)
{dataDb.Table.Remove(row);
}dataDb.SaveChanges();

但这种做法,测试下来太耗费时间了,请问有什么更高效的做法吗?

回答区


  • Ahmed Alejo

警告:下面的做法仅适合那些小表操作 (?<1000)

这里我采用的是通过 EF 去删除表记录,而不是直接使用 sql,所以此种删除方式适合所有 EF 支持的  RDBM ,声明一下,如果你的表数据很小,或者你不在乎性能,可以简单如下调用。


VotingContext.Votes.RemoveRange(VotingContext.Votes);

为了让代码更干净简洁,可以专门定义一个 扩展方法


public static class EntityExtensions
{public static void Clear<T>(this DbSet<T> dbSet) where T : class{dbSet.RemoveRange(dbSet);}
}

接下来代码意图就明显了。


VotingContext.Votes.Clear();
VotingContext.Voters.Clear();
VotingContext.Candidacy.Clear();
VotingContext.Polls.Clear();
await VotingTestContext.SaveChangesAsync();

  • Rudi Visser

最快的方式当然是使用 SQL 的 TRUNCATE TABLE,它是直接针对表操作而不是单独的行。


dataDb.ExecuteStoreCommand("TRUNCATE TABLE [Table]");

如果你用的是 EFCore 3.1,可以使用下面的语句清空所有行。


context.Database.ExecuteSqlRaw("TRUNCATE TABLE [TableName]");

点评区

其实这是在 EF 操作中经常会遇到的一个问题,通常的做法也就上面这两种。

  • 想更加通用,不考虑性能,采用 EF 直接操作,生成的 sql 大概如下。

static void Main(string[] args){PYZ_LEntities entities = new PYZ_LEntities();entities.Database.Log = Console.WriteLine;entities.Color.RemoveRange(entities.Color);entities.SaveChanges();Console.ReadLine();}

监控到 sql:


Opened connection at 2021/4/5 22:09:12 +08:00SELECT[Extent1].[ID] AS [ID],[Extent1].[ColorName] AS [ColorName],[Extent1].[ColorCode] AS [ColorCode],[Extent1].[IsDelete] AS [IsDelete]FROM [dbo].[Color] AS [Extent1]-- Executing at 2021/4/5 22:09:12 +08:00-- Completed in 5 ms with result: SqlDataReaderClosed connection at 2021/4/5 22:09:12 +08:00Opened connection at 2021/4/5 22:09:12 +08:00Started transaction at 2021/4/5 22:09:12 +08:00DELETE [dbo].[Color]
WHERE ([ID] = @0)-- @0: '1' (Type = Int32)-- Executing at 2021/4/5 22:09:12 +08:00-- Completed in 1 ms with result: 1DELETE [dbo].[Color]
WHERE ([ID] = @0)-- @0: '2' (Type = Int32)-- Executing at 2021/4/5 22:09:12 +08:00-- Completed in 0 ms with result: 1DELETE [dbo].[Color]
WHERE ([ID] = @0)-- @0: '3' (Type = Int32)-- Executing at 2021/4/5 22:09:12 +08:00-- Completed in 0 ms with result: 1Committed transaction at 2021/4/5 22:09:12 +08:00Closed connection at 2021/4/5 22:09:12 +08:00

从输出信息看,清空操作采用的是将所有的sql拼在一个 Transaction 内,性能有所提升,不过确实只适合一些小表????????????

  • 想要定制化,性能优先,直接使用 sql

原文链接:https://stackoverflow.com/questions/15220411/entity-framework-delete-all-rows-in-table

NET问答: Entity Framework 如何快速高效的删除表中所有记录 ?相关推荐

  1. Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作

    Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 1>. 创建一个控制台程序 2 ...

  2. MySQL中快速删除表中的数据

    delete from user;  //删除user表中的数据,但是这种删除数据的方式有点慢. delete删除数据的原理:(delete属于DML语句) 表中的数据被删除了,但是这个数据在硬盘上的 ...

  3. Entity Framework Core生成的存储过程在MySQL中需要进行处理及PMC中的常用命令

    在使用Entity Framework Core生成MySQL数据库脚本,对于生成的存储过程,在执行的过程中出现错误,需要在存储过程前面添加 delimiter // 附:可以使用Visual Stu ...

  4. excel剔除空格_怎样快速、批量删除Excel中的空格?

    我们在Excel中处理数据时,常常会因为遇到空格而影响数据的统计,如果一个一个删除,不仅费时费力,而且因为空格的特殊性,有时不容易被发现,那么如何快速删除Excel中的空格呢? 1.查找替换法 如下, ...

  5. oracle删除表中数据_Excel工作表中,删除重复数据的2种方法解读,高效且实用!...

    在实际的工作中,经常要对工作表中重复的数据进行删除,如若数据行只有几条,则可通过人工查找出来,如若数据行较多,这种方法就费时费力,而且容易出错,造成对表格数据的准确性和个人能力的怀疑--今天,小编给大 ...

  6. 列注释_【EXCEL检查问题】:如何快速检查并删除EXCEL中隐藏的工作表、行、列等信息...

    前注:本案例是以EXCEL2016为示范软件,各版本的部分功能和路径可能不同 在EXCEL使用过程中,你是否遇到过某一列的公式怎么修改都报错的情况?你是否遇到过一个只有区区几行数据的表格,却占用了好几 ...

  7. Entity Framework 重写OnModelCreating,控制生成表名的单复数

    重写OnModelCreating,控制生成表名的单复数 public class MYDbContext : DbContext{public DbSet<User> Users { g ...

  8. java逐行读取文件数组_快速高效地在Java中逐行读取大型JSON文件的方法

    您可以使用 JSON Processing API (JSR 353)以流式方式处理数据: import javax.json.Json; import javax.json.stream.JsonP ...

  9. ADO.NET Entity Framework Beta2(五)/快速入门(实体框架)

    This quickstart illustrates a series of tasks that support the topics in Getting Started with the En ...

最新文章

  1. C语言实现AES加解密
  2. 加拿大留学商科好还是计算机科学好,去加拿大读商科专业就是要选择这些才最好!...
  3. Java LinkedList指南
  4. 手写一个RPC框架,理解更透彻(附源码)
  5. C++基础:第七章 函数
  6. 实现二叉树的遍历(递归与非递归)
  7. RAR Extractor Max for Mac(解压缩软件)
  8. 说出this的三个应用
  9. iostate知识要点
  10. Qt基本控件及三大布局
  11. 【美赛】美赛字体格式和排版要求
  12. [matlab数字图像处理3]打开一副低对比度图像,拉伸其图像对比度
  13. Python 实现Jaccard相似度计算,判断英文新闻标题相似度
  14. 电子警察技术原理分析
  15. 【手写源码-设计模式9】-装饰器模式-基于王者荣耀英雄-甄姬皮肤场景
  16. Python原生服务端签名生成请求订单信息「orderString」
  17. ida符号文件路径设置
  18. android 屏幕像素密度计算器,手机/平板电脑屏幕PPI计算器
  19. oracle 碎片超过1000有啥危害,碎片化带来的坏处作文1000字
  20. 漫谈网络安全学习路线:路漫漫其修远兮,吾将上下而求索。

热门文章

  1. Unity经典游戏教程之:雪人兄弟
  2. linux lsof/netstat查看进程和端口号相关命令:
  3. 设计模式——享元模式具体解释
  4. SQL JOIN连接分类[转]
  5. 一张图看懂微软Power BI系列组件
  6. wikioi 1034 家 实时动态的网络流量(费用流)
  7. UVa 1639 (期望) Candy
  8. Redis系统性介绍
  9. iOS使用NSURLConnection发送同步和异步HTTP Request
  10. Kinect开发笔记之四检测并调试Kinect设备