EF架構 資料分批批量提交

2022-02-19 13:02:51 字數 1361 閱讀 1724

回到目錄

對於大資料量提交,包括插入,更新和刪除,我始終不建議用ef自帶的方法,因為它會增加與資料庫的互動次數,一般地,ef的乙個上下文在提交時會開啟乙個資料連線,然後把轉換成的sql語句一條一條的發到資料庫端

,然後去提交,試想,如果你的資料量達到萬級別(更不用說百萬,千萬資料了),那對資料庫的壓力是很大的,所以,我將ef批量操作語句進行了改版,並起名為bulkinsert,bulkupdate和bulkdelete,事實上,在我之前的版本中並沒有涉及到批次提交的概念,直到遇到了實際的問題,當你使用bulkinsert時,如果資料達到4萬之前,那在sql的解釋時,也是很有壓力的,有多情況下會超時,當然這與你的資料庫伺服器有關,但為了效能與安全,我還是決定將bulk操作變為分批提交,即將4w進行分解,分用1w資料量提交一次,這樣,對資料庫的壓力就小一些。看看我的改版吧。

public

void bulkinsert(ienumerableitem));}

public

void bulkdelete(ienumerableitem));}

public

void bulkupdate(ienumerableitem)

);}

///

///分頁進行資料提交的邏輯

/// ///

原列表 ///

處理方法

///要進行處理的新列表

private

void datapageprocess(ienumerableitem, action>method)

}}

我們可以看到,改版後的方法,沒有直接把集合item傳遞給方法executesqlcommand去執行,而去呼叫了乙個方法,這個方法然後傳入乙個委託,然這個委託的

輸入引數是乙個分頁的資料集合,這時你的executesqlcommand方法接入的集合引數將是乙個分了頁之後的小集合,呵呵。

對於一次提交的數量,你可以在類中去定義,它類似於分頁,所以,我通常叫這個方法為資料分頁提交!

#region fields

//////資料總數

/// int datatotalcount = 0

;

//////

資料總頁數

/// int datatotalpages = 0

;

//////

資料頁面大小(每次向資料庫提交的記錄數)

/// int datapagesize = 10000

;

#endregion

回到目錄

EF架構 基於EF資料層的實現

之前寫過關於實現乙個完整的 架構的文章,文章的閱讀量也是滿大的,自己很欣慰,但是,那篇文章是我 年寫的,所以,技術有些不成熟,所以今天把我的 年寫的ef底層架構公開一下,這個架構比 年的有了很大程度的提高,主要在介面規範,查詢規範上,並引入了排序功能,兩步對完善了 對資料的批量操作,可以說,這次的架...

spring ibatis 批量提交資料

在系統中,提取資料迴圈計算後,每次需要有大概3000條左右的資料需要提交到資料庫。以前在迴圈中單條插入,開始只有200條左右的資料,看不出效能上的問題,現在資料量增長了很多,所以需要對提交功能做一下優化。spring整合了ibatis的批量提交的功能,我們只要呼叫api就可以了 首先在你的dao中需...

Oracle按資料量分批次提交

留備 declare type cur is ref cursor my cur cur col num scott.emp test rowtype num number 10 begin open my cur for select from scott.emp test loop fetch ...