关于 EntityFramework Extensions 的问题

问题描述

使用EntityFrameworkExtensionsUpdate的时候。测试代码的时候这样写是正常的。db.Students.Where(t=>t.Id==2).UpdateAsync(t=>newStudent(){Age=5});

(其中ID是主键)使用这个目地是直接更新单个字段时。而不想使用原来的整行update。接下来,在网站中使用了Repository。其中uddate代码是publicUpdate(Expression<Func<T,bool>>filterExpression,Expression<Func<T,T>>updateExpression,boolsave=true){if(filterExpression==null)thrownewArgumentNullException("filterExpression");if(updateExpression==null)thrownewArgumentNullException("updateExpression");varquery=Entities.Where(filterExpression);query.Update(updateExpression);if(save)SaveChanges();}

然后问题来了。这里会发生一个错误。序列包含一个以上的元素指向的代码行是query.Update(updateExpression);这句。这个问题已经困牢我很久了。。

解决方案

本帖最后由 jxnkwly 于 2014-12-20 17:36:20 编辑
解决方案二:
没用过update这个我通常更新用类似这样的语句DbEntityEntryentry=db.Entry<T>(model);entry.State=System.Data.EntityState.Modified;returndb.SaveChanges();当然、这是整行更新
解决方案三:
上图
解决方案四:
既然报错是说你提供的集合就是你的query经过updateExpression删选后的集合包含1条以上的数据,那么你就跟踪一下query.Where(updateExpression)得到的结果是有多少记录,如果是要更新多条,且他的update只接受1条,那你就一条条给他咯
解决方案五:
我都是整行更新的,这个没弄过
解决方案六:
引用3楼wjq的回复:

既然报错是说你提供的集合就是你的query经过updateExpression删选后的集合包含1条以上的数据,那么你就跟踪一下query.Where(updateExpression)得到的结果是有多少记录,如果是要更新多条,且他的update只接受1条,那你就一条条给他咯

EntityFrameworkExtensionsUpdate本来就是用来批量更新的,
解决方案七:
你的例子是UpdateAsync,你下面的实际是Update,这两个没可比性,你为啥认为前面的可以,后面的也要可以
解决方案八:
引用5楼jxnkwly的回复:

Quote: 引用3楼wjq的回复:
既然报错是说你提供的集合就是你的query经过updateExpression删选后的集合包含1条以上的数据,那么你就跟踪一下query.Where(updateExpression)得到的结果是有多少记录,如果是要更新多条,且他的update只接受1条,那你就一条条给他咯

EntityFrameworkExtensionsUpdate本来就是用来批量更新的,

你的报错就是要求1条数据,前言不搭后语的我们也就帮你猜问题,“本来”的事情多着呢
解决方案九:
我用这个:
解决方案十:
我上一家公司就是用这种方式的我很不喜欢原因....不说了各有各的看法另外EF自带的更新是不会更新整行的你可以跟踪一下sql语句
解决方案十一:
引用9楼moonwrite的回复:

我上一家公司就是用这种方式的我很不喜欢原因....不说了各有各的看法另外EF自带的更新是不会更新整行的你可以跟踪一下sql语句

EF自己的更新是会整行更新的。
解决方案十二:
引用8楼webdiyer的回复:

我用这个:

用的就是这个。
解决方案十三:
说实话,除非某个字段内容特别大,还不如整行更新速度快呢。

时间: 2024-09-27 02:35:28

关于 EntityFramework Extensions 的问题的相关文章

EF大数据批量处理----BulkInsert

这些扩展方法在哪里找 批量添加和EF本身自带的添加性能提高了多少 为什么扩展方法用的时间这么少 之前做项目的时候,做出来的系统的性能不太好,在框架中使用了EntityFramework,于是就在网上查资料,研究如何提高EF的性能. 在这分享一篇博客 批量操作提升EntityFramework的性能 里面提供了一个扩展库Entity Framework扩展库,在这里面找到了一些比较好的方法.下面主要介绍其中的一个方法--批量添加BulkInsert. 这些扩展方法在哪里找? 在VS中新建EF之后,

关于.NET玩爬虫这些事

在微信群里又聊到.NET可以救中国但是案例太少不深的问题,我说.NET玩爬虫简直就是宇宙第一,于是大神朱永光说,你为何不来写一篇总结一下? 那么今天就全面的来总结一下,在.NET生态下,如何玩爬虫. 关于爬虫 从搜索引擎开始,爬虫应该就出现了,爬的对象当然也就是网页URL,在很长一段时间内,爬虫所做的事情就是分析URL.下载WebServer返回的HTML.分析HTML内容.构建HTTP请求的模拟.在爬虫过程中存储有用的信息等等,而伴随着App的发展以及CS系统通讯方式的HTTP化,对服务接口特

EF删除出现错误使用了扩展库

问题描述 EF删除出现错误使用了扩展库 错误信息:'.' or '(' expected 详细信息 在 System.Linq.Dynamic.ExpressionParser.ValidateToken(TokenId t String errorMessage) 在 System.Linq.Dynamic.ExpressionParser.ParseTypeAccess(Type type) 在 System.Linq.Dynamic.ExpressionParser.ParseIdenti

.Net框架搭建之2、SQL Server MEF依赖注入 MVC Repository框架

MEF依赖注入简介 依赖注入对于开发人员来说,方便的就是不需要去关注具体的实现类,不需要去New实例对象,直接使用接口层就能让程序自动注入使用,当然,还有其他一些特点,比如web http同一个请求中可以设置同一个对象只实例化一次解决多个类中多次实例化对象浪费资源的问题.不多说,百度能得到更多 多的介绍,这边直接开工搭环境. 1.数据模型Model层创建 数据模型层,首先要创建数据库,再创建Model类. 创建数据库,表,添加一条测试数据 创建数据库 创建数据表 添加测试数据 我们已经知道有几层

Entity Framework. The query must be of type ObjectQuery or DbQuery.

问题描述 解决方案 解决方案二:需要转换为varquery=(DbQuery<Customer>)customer;然后在进行相应处理吧解决方案三:话说这里....bse.Customer.Update(c=>newCustomer(){EmployerID=employId}); 解决方案四:引用2楼shaoerbao的回复: 话说这里....bse.Customer.Update(c=>newCustomer(){EmployerID=employId}); 没明白解决方案五:

.Net框架搭建之1、SQL Server EF MVC简单三层框架

.Net简单三层框架简介 简单三层框架,是.Net开发中最最基础的框架了,由 数据访问层.逻辑处理层.表示层组成.一般情况下,在项目中数据模型Model层也是单独一层,但是只是单纯的数据模型不算在业务层划分当中. 好了,框架搭建,如果不了解,可能会觉得难以下手,了解之后,自然知道怎么做,只是其中的步骤,比起单纯的功能开发,是要繁琐不少,下面我们来一步一步搭建属于自己的框架,这里只列出重要步骤,其他未提到的细节可自行摸索. 数据模型Model层创建 数据模型层,首先要创建数据库,再从数据库生成EF

从Managed Extensions for C++中使用.NET My Services

摘要:本白皮书将指导您编写一个使用示例 .NET My Services 的客户端应用程序.该客户端应用程序将使用 Managed Extensions for C++.Visual Studio .NET 和 .NET My Services 软件开发包 (SDK) 来编写.与 Visual C# 或 Visual Basic 客户端应用程序相比,您还需要执行其他一些步骤.本白皮书假定您已经熟悉 Visual Studio XML Web Service 模型,该模型用于创建和使用来自客户端应

如何使用EntityFramework 6.1的DbCommandInterceptor拦截生成的SQL语句

开始 EF6.1也出来不少日子了,6.1相比6.0有个很大的特点就是新增了System.Data.Entity.Infrastructure.Interception 命名空间,此命名空间下的对象可以允许我们更加方便的了解到EF运行时的一些信息,当然我们最想看的还是EF生成的Sql语句,话不多讲,开始干吧; class EFIntercepterLogging : DbCommandInterceptor { private readonly Stopwatch _stopwatch = new

使用AJAX Extensions客户端进行Web服务调用

从根本上讲,ASP.NET 自始至终都是一项服务器端技术.当然,在某些情况下 ASP.NET 会生成客户端 JavaScript,特别是在验证控件中以及在新推出的 Web 部件基础结构中,但它通常只是简单地将客户端 属性转换成客户端行为.作为开发人员,在收到下一个 POST 请求之前不必考虑与客户端进行交互.对于 需要使用客户端 JavaScript 和 DHTML 构建更具交互性的页面的开发人员而言,则需要在 ASP.NET 2.0 脚本回调功能提供的一些帮助下自己编写代码.这一情况在去年得到