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

這事吧,還得從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了.