回到目錄
無論是linq to sql還是linq to object(entity frameworks)它們都為開發人員提供了insert操作,及insert集合操作,即insertonsubmit和insertallonsubmit,前者是將乙個實體標記為乙個插入狀態,而後都是將乙個集合標記為插入狀態,而當前進行這兩種操作時,你並沒有與資料庫進行連線,這就是linq提倡的延時載入,那它們什麼時候與資料庫進行真正的互動呢,實現上,實驗表明,是在觸發submitchanges方法時,才會真實與資料庫進行操作,這是正常的,也沒有什麼可以說的。
而今天我主要說的就是,當我們進行批量插入時,用linq給我們提供的insertallonsubmit方法是否可以實現我們的操作,如果實現了,那是否是我們能夠接受的方式,我們在做乙個實驗吧
乙個列表:
1 listuserlist=new list();23for(int i=0;i<100000;i++)
4 );
6 }7
_db.insertallonsubmit(userlist);
89 _db.submitchanges();
結果怎麼樣呢?經過我的觀察,結果是正確的,10萬條資料可以插入到資料庫中,linq確實是幫助我們完成了列表的插入工作,但過程我們是否可以接受?
ok,既然linq的方式是不可取的,那我們只好自己去動手寫了,呵呵,我們的思想去將10條insert合併在一起,一次性發給伺服器,一次性執行,對於目前的網路頻寬這10條資料不成問題,呵呵。
一 單個實體的insert,我們採用linq的延時插入方式:
1public
virtual
void insert(tentity entity) where tentity : class
2
二 批量插入實體,我們採用拼接字串,並向資料伺服器發命令的方式,這個也是我比較滿足的作品,它是乙個通用的方式,並且不需要修改原來插入**,它的
方法簽名是乙個列表,這樣做是正確的,對於程式設計師來說是非常友好的。
先看之前的linq批量插入:
publicvirtual
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 企業模式的未來 說到能力,這個太...