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

咨询区

  • Zhenia

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

我目前是这样写的。


var rows = from o in dataDb.Table
           select 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:00

SELECT
    [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: SqlDataReader



Closed connection at 2021/4/5 22:09:12 +08:00

Opened connection at 2021/4/5 22:09:12 +08:00

Started transaction at 2021/4/5 22:09:12 +08:00

DELETE [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: 1


DELETE [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: 1


DELETE [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: 1


Committed transaction at 2021/4/5 22:09:12 +08:00

Closed 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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Entity Framework是由微软开发的一种对象关系映射(ORM)框架,用于在应用程序和数据库之间建立连接和交互。它提供了一种简化的方式来操作数据库,减少了开发人员编写繁琐的数据库代码的工作量。 Entity Framework的官方文教程提供了详细的指导和示例,帮助开发人员快速入门并深入理解该框架。教程覆盖了从基本概念到高级主题的广泛内容,确保开发人员能够全面了解和正确使用Entity Framework。 在教程,您将学习如何创建实体数据模型,定义实体类和属性,并使用Code First或Database First方法生成数据库架构。您还将了解如何执行常见的数据操作,如插入、更新和删除数据,以及高级查询和过滤技术。 该教程还介绍了如何使用LINQ查询语言与Entity Framework集成,以及如何配置和管理实体关系、继承和导航属性等。此外,教程还包括了性能优化、事务处理和并发控制等方面的指导,帮助您运用Entity Framework的最佳实践。 无论您是初学者还是有经验的开发人员,通过Entity Framework官方文教程,您将能够更高效、更轻松地利用该框架来构建稳健的应用程序。掌握Entity Framework的知识将使您能够更好地理解和操作应用程序数据,提高开发效率,减少代码量,并提供更好的可维护性和可扩展性。 ### 回答2: Entity Framework是微软推出的开源ORM(对象关系映射)框架,用于简化开发人员在应用程序访问和操作数据库的过程。它允许开发人员通过使用面向对象的方法来处理数据库操作,而无需关注底层的数据库细节。 Entity Framework官方文教程提供了针对初学者和有经验的开发人员的详细指导,帮助他们快速上手并使用Entity Framework进行开发。教程主要涵盖以下内容: 1. 环境准备:教程开始之前,首先介绍了Entity Framework的基本要求和安装步骤。它提供了逐步的说明,使读者能够轻松地配置和准备开发环境。 2. 数据模型:教程介绍了如何使用Entity Framework的Code First方法来创建和管理数据库的数据模型。它详细解释了如何定义实体类以及如何配置数据库关系和约束。 3. 数据访问:教程演示了如何通过Entity Framework执行常见的数据库操作,如插入、更新和删除数据。它还介绍了如何使用LINQ(Language Integrated Query)查询数据,以及如何使用存储过程和原始SQL查询。 4. 数据迁移:教程解释了如何使用Entity Framework的迁移工具来处理数据模型的更改和版本管理。它指导开发人员如何创建和应用迁移脚本,以便无缝地升级和更新数据库结构。 5. 性能优化:教程提供了一些建议和技巧,帮助开发人员优化Entity Framework应用程序的性能。它讨论了缓存、批量操作、延迟加载等性能改进方法,并解释了如何使用“Eager Loading”和“Explicit Loading”来提高查询性能。 总的来说,Entity Framework官方文教程是一个全面而易于理解的资源,适用于所有层次的开发人员。无论是初学者还是有经验的开发人员,都可以通过这个教程深入了解Entity Framework的工作原理和最佳实践,并用它来简化和加速自己的数据库开发工作。 ### 回答3: Entity Framework是微软推出的一个对象关系映射(ORM)框架,用于简化与数据库的交互,并提供面向对象的方式进行数据操作。Entity Framework官方文教程是微软提供的针对该框架的文教学资料。 这个教程将帮助开发人员快速了解和掌握Entity Framework的基本概念、架构和使用方法。教程内容包括如何创建数据模型、执行数据查询、进行数据插入、更新和删除操作等。同时,教程还介绍了如何通过Code First、Database First和Model First等不同的开发方法来创建和管理数据模型。 在教程,会提供具体的示例代码和详细的解释,以帮助开发者更好地理解框架的使用方式。通过按照教程的步骤进行实践,开发人员可以快速上手,并且能够在实际项目应用Entity Framework来提高开发效率。 此外,教程还涵盖了一些高级主题,包括如何进行数据关联、使用事务、进行性能优化和使用存储过程等。这些内容可以帮助开发人员更深入地了解Entity Framework,并在实际应用解决一些复杂的数据操作需求。 总而言之,Entity Framework官方文教程是一个全面且系统的教学资源,对于想要学习和使用Entity Framework框架的开发人员来说,是一个不可或缺的参考资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值