保持重典的风格,先看一下最终的效果.
前言
这事吧,还得从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了.
版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明!