日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/12/4 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NET问答: Entity Framework 如何快速高效的删除表中所有记录 ? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

咨詢區(qū)

  • Zhenia

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

我目前是這樣寫的。

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

但這種做法,測試下來太耗費時間了,請問有什么更高效的做法嗎?

回答區(qū)


  • Ahmed Alejo

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

這里我采用的是通過 EF 去刪除表記錄,而不是直接使用 sql,所以此種刪除方式適合所有 EF 支持的 ?RDBM ,聲明一下,如果你的表數(shù)據(jù)很小,或者你不在乎性能,可以簡單如下調(diào)用。

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]");

點評區(qū)

其實這是在 EF 操作中經(jīng)常會遇到的一個問題,通常的做法也就上面這兩種。

  • 想更加通用,不考慮性能,采用 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();}

監(jiān)控到 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 內(nèi),性能有所提升,不過確實只適合一些小表????????????

  • 想要定制化,性能優(yōu)先,直接使用 sql

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

總結(jié)

以上是生活随笔為你收集整理的NET问答: Entity Framework 如何快速高效的删除表中所有记录 ?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。