sql – 实体框架命中2100参数限制
|
我正在将一些代码从LINQ-to-SQL迁移到Entity Framework.以前,当从SQL Server(描述为 here)的2100参数限制运行时,我使用了Marc Gravell here提供的解决方案.如他自己的响应中所述,它不适用于Entity Framework. 我对表达式完全没有经验,知道从哪里开始,但我正在寻找的是基本相同的扩展方法,但适用于实体框架.提前感谢您提供的任何帮助. 解决方法EF中不存在2100参数限制问题.我在the AdventureWorks database上运行了一个测试(在SQL Express 2008 R2中):我正在尝试将所有产品放在ProductCategoryId的值范围内(1,2,3). 使用LINQ,生成的SQL WHERE子句如下所示: WHERE [t0].[ProductCategoryID] IN (@p0,@p1,@p2) -- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [1] -- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [2] -- @p2: Input Int (Size = -1; Prec = 0; Scale = 0) [3] (导致最大参数编号问题),而使用EF 4.0,它看起来像这样: WHERE [Extent1].[ProductCategoryID] IN (1,3) 接下来,我用EF测试了这个值,列出了3000个值: var categoryList = Enumerable.Range(1,3000).Select(i => (int?)i).ToArray();
using (var aw = new AdventureWorksEntities())
{
var products = aw.Products
.Where(p => categoryList.Contains(p.ProductCategoryID))
.ToList();
}
虽然这是非常低效的,但它起作用并产生预期的结果. 但是,也可以使用带有EF的InRange扩展provided by Marc Gravell,也可以使用LINQKit library,如下所示: using (var aw = new AdventureWorksEntities())
{
var products = aw.Products
.AsExpandable()
.InRange(p => p.ProductCategoryID,1000,categoryList)
.ToList();
}
(AsExpandable扩展在LINQKit中定义) 这会产生预期的结果(以块的形式执行查询),并且根据列表中的项目数量,块的大小可以比非分块的解决方案更有效. (编辑:我爱制作网_池州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – 如果我选择超过15个字段,我会遇到灾难性的失
- 盖茨不安好心 微软与IBM合作计划信不过?
- 学习超级链接A标记
- html表单控件禁用属性readonly VS disabled介绍
- sql-server – 什么日期/时间文字格式是LANGUAGE和DATEFORM
- 骇“刻”帝国全面来袭,DVD刻录时代来临
- sql-server – coldfusion,iis7,sql server管理员有哪些日常
- sql-server – SQL Server ROWLOCK over SELECT如果不存在I
- Powershell Invoke-Sqlcmd的错误检测并不总是有效?
- 中美两国虚拟主机产业价值差异的根源


