將不確定變為確定系列 Linq的批量操作靠的住嗎?

2022-02-20 02:11:58 字數 2411 閱讀 8151

回到目錄

無論是linq to sql還是linq to object(entity frameworks)它們都為開發人員提供了insert操作,及insert集合操作,即insertonsubmit和insertallonsubmit,前者是將乙個實體標記為乙個插入狀態,而後都是將乙個集合標記為插入狀態,而當前進行這兩種操作時,你並沒有與資料庫進行連線,這就是linq提倡的延時載入,那它們什麼時候與資料庫進行真正的互動呢,實現上,實驗表明,是在觸發submitchanges方法時,才會真實與資料庫進行操作,這是正常的,也沒有什麼可以說的。

而今天我主要說的就是,當我們進行批量插入時,用linq給我們提供的insertallonsubmit方法是否可以實現我們的操作,如果實現了,那是否是我們能夠接受的方式,我們在做乙個實驗吧

乙個列表:

1 listuserlist=new list();23

for(int i=0;i<100000;i++)

4 );

6 }7

_db.insertallonsubmit(userlist);

89 _db.submitchanges();

結果怎麼樣呢?經過我的觀察,結果是正確的,10萬條資料可以插入到資料庫中,linq確實是幫助我們完成了列表的插入工作,但過程我們是否可以接受?

ok,既然linq的方式是不可取的,那我們只好自己去動手寫了,呵呵,我們的思想去將10條insert合併在一起,一次性發給伺服器,一次性執行,對於目前的網路頻寬這10條資料不成問題,呵呵。

一 單個實體的insert,我們採用linq的延時插入方式:

1

public

virtual

void insert(tentity entity) where tentity : class

2

二 批量插入實體,我們採用拼接字串,並向資料伺服器發命令的方式,這個也是我比較滿足的作品,它是乙個通用的方式,並且不需要修改原來插入**,它的

方法簽名是乙個列表,這樣做是正確的,對於程式設計師來說是非常友好的。

先看之前的linq批量插入:

public

virtual

void insert(ienumerablelist) where tentity : class

而在我們修改後,方法簽名是不變的,所以原來呼叫它的方法,不需要進行修改:

1

///2

///ado優化的批量新增

3///

4///

5///

6public

virtual

void insert(ienumerablelist) where tentity : class

7

所需要的輔助方法:

1

#region linq呼叫t-sql實現批量新增

2///

3///

得到資料庫表或檢視的抽象

4///

5///

6///

7metatable getmetatable(type rowtype)811

12///

13///

建立sql語句

14///

15///

16///

17 tuple createinsertarguments(tentity entity)

1845

4647

if (member.type == typeof(string) || member.type == typeof

(datetime))''"

);49

else");

51if (value.gettype() == typeof(string

))52 value = value.tostring().replace("

'", "

char(39)");

53arguments.add(value);

5455}56

}57}58

59) values (");

6162);"

);64

return

new tuple(fieldbuilder.tostring(), arguments.toarray());65}

6667

void insertforado(ienumerablelist)

68);

75db.executecommand(sqlstr.tostring());76}

7778

#endregion

接下來的時間,我將會繼續寫乙個批量更新和批量刪除,敬請收看,呵呵。

回到目錄

將不確定變為確定 程式是否真的Dispose了

首先將來說一下dispose是什麼東西吧,對於我們使用非託管的資源時,需要自己去實現dispose這個方法,它的含義就是釋放使用的記憶體空間。例如stream這個型別,它就是乙個非託管型別,它會實現乙個idisposable介面,來實現dispose方法 像transactionscope,net事...

將不確定變成確定 類中的override

說到override大家都知道,它是複寫,子類去複寫父類的方法與屬性,是,沒錯,今天主要就說這個複寫,如果不複寫會有什麼結果,有沒有想過,呵呵 來和我做個demo吧 1 abstract class parent24 567 class sub parent8 1011 在另外乙個類中為sub這個屬...

確定的現在,不確定的未來!

希望我們未來都能遇見更優秀 更快樂的自己!2020.02.29 由於疫情的影響,無法正常復工,只有偶爾去公司值班。最近也看了很多的文章,有關於疫情,有關於工作模式,有關於未來,說實話,看完以後還是蠻有壓力的,也是應該給自己一些憂患意識了,總結一下,大概有以下幾點 1 企業模式的未來 說到能力,這個太...