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了.

 
 
时间: 2024-08-01 06:56:37

Linq to Entities in Ado.net EF的事务的相关文章

EF下LINQ to Entities不支持语法及替代方案

LINQ to Entities是Ado.net Entity Framework的查询语言之一,它为了更好的兼容更多种的数据库所以在使用方法上有所精简,比之linq2SQL却少了一些好用的方法,下面就说一下这些日子来使用它时遇到的问题及解决方法 以下只列出了完全Not supported的内容,部分supported的方法都可以通过简单的增简参数解决 1.Contains 这一函数在linq2sql中将生成in方法 var s=db.Account.Select(c => c.ID);var

pkm的linq to Entities学习1

数据准备: if exists (select * from sysobjects where id = OBJECT_ID('[classinfo]') and OBJECTPROPERTY(id, 'IsUserTable') = 1) DROP TABLE [classinfo] CREATE TABLE [classinfo] ( [id] [bigint] NOT NULL, [classID] [bigint] NOT NULL, [className] [nvarchar] (50

LINQ to Entities 不支持 LINQ 表达式节点类型“ArrayIndex”

我就不屁话,能一张图就解决的就不说话了   2015-03-28 14:53:24,440 [10] ERROR log - System.NotSupportedException: LINQ to Entities 不支持 LINQ 表达式节点类型"ArrayIndex". 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.NotSupportedTranslator.Translate(ExpressionCo

linq to Entities,将查询语句转换为普通的SQL语句

using (testEntities MyEntity = new testEntities()) { #region linq to entities 内容练习3 var result = from s in MyEntity.stuinfo where s.username == "pkm" select new { username=s.username, age=s.age }; var psql = result.GetType().GetMethod("ToTr

linq-求 解决LINQ to Entities 的问题

问题描述 求 解决LINQ to Entities 的问题 求帮助 解决方案 linq to sql的提供程序是将linq翻译成sql的,所以不是所有的系统函数都支持,这里tostring不支持. 你可以先tolist后放入内存再select一次.

在ADO.NET中使用事务保护数据的完整性(1)

ado|数据 在ADO.NET中使用事务保护你数据的完整性 Christa May 2004 小结: 当修改数据时,事务是维护数据完整性的一个关键特征. 纵览一下事务及其重要性,接下来学习如何在你的应用中使用事务保护数据. 内容 介绍 事务剖析 事务在ADO.Net中 实施事务 总结 介绍 大多数企业数据库为了在数据修改时保证数据的完整性而提供了事务这样一个特征. 维护数据的完整性目的是保证组织依赖数据的质量; 毕竟, 当你生成报表或进行一些数据驱动的处理, 你希望知道你操作的数据是正确的. 一

LinQ to entities 不能识别方法“system.string.ToString(system.String)”.因此该方法无法转换为存储表达式

[我也是刚研究IEnumerable和IQueryable]以下都是个人理解,仅供参考,如有错误欢迎指出~ 在EF里面,使用IQueryable和IEnumerable可以延迟加载. IQuerybale其实是微软针对SQLService进行了再度优化的一个产物.使用上基本和IEnumerable类似. 其实还是有一些使用上的区别的,比如说IEnumerable里面有count()方法,我们可以借此进行for循环.IQueryable却只能foreach循环. -----------------

LINQ to Entities 不识别方法“System.DateTime AddHours(Double)”,因此该方法无法转换为存储表达式

问题描述 frompindatabase.OrderInfoeswherep.PayStatus==0&&p.ShippingStatus==0&&p.OrderStatus==0&&p.CreateTime<=DateTime.Now.AddHours(-24)selectp取小于某个时间的数据报错信息:LINQtoEntities不识别方法"System.DateTimeAddHours(Double)",因此该方法无法转换为存

LINQ to Entities 不识别方法“System.String ToString(System.String)”因此该方法无法转换为存储表达式

问题描述 varweather=(fromcindb.CCISWeatherForecastswherec.Date.ToString("yyyy-MM-dd")=="2011-11-10"selectc).FirstOrDefault();LINQtoEntities不识别方法"System.StringToString(System.String)",因此该方法无法转换为存储表达式. 解决方案 解决方案二:c.Date.ToString(&q