天天看點

Linq to Entities in Ado.net EF的事務

保持重典的風格,先看一下最終的效果.

Linq to Entities in Ado.net EF的事務

這事吧,還得從Linq to Sql說起

近乎所有的Linq to SQL的查詢中總是免不了exec sp_reset_connection 與Audit Logout(就 是資料庫連接配接)

這一進一出,費時太多,于是近半年來每個月總有那麼幾天來研究它

網上呢,解決方案不是沒有

using (TransactionScope ts = new TransactionScope())

{

//一堆Linq to Sql or Linq to Entities,重典語

}

不過這個經過無數次的使用發現,CUD它的确可以将 生成的SQL事務執行,但也不是完全.

而且在Select時它幾乎就是不起作用,一對對的exec sp_reset_connection和Audit Logout,快把我B瘋了

正确解決方法如下

var DB=new XXContext();

DB.Connection.Open();

using (var ts = DB.Connection.BeginTransaction()) {

//一堆Sql to Entities,重典語

DB.Connection.Close();//是否必寫寫未實驗

這一下就爽了,原本支離破碎的SQL事務一氣和成

其實也可以寫一個自定義實作了IDisposable的類,使Open() Close()也省了.

這回爽了

另:有的時候我們要使用直接使用Sql來進行CUD(沒R)也就是用傳統的Command來操作

在EF中如何才能使你的操作與EF的Sql to Entities在同一事務中呢,其實這樣即可:

cmd.Connection=(DB.Connection as EntityConnection).StoreConnection;

這樣就可讓二者使用共同 的Connection了.