参数集合中已存在名为“p__linq__0”的参数。参数名称在参数集合中必须是唯一的

时间:2011-06-09 15:45:22

标签: c# .net entity-framework entity-framework-4

这是我从Entity Framework获得的一个奇怪的错误:“参数集合中已存在名为'p_ linq _0'的参数。参数集中的参数名称必须是唯一的。”我没有做任何自定义参数或任何花哨的东西,简单的直接LINQ查询或存储过程执行,没有什么花哨,没有什么特别的,没有实体SQL ...所以为什么会发生这种错误?

感谢。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题 - 我在他们自己的Task.Run中并行运行了几个查询。

我的每个查询都使用了我填充的ID列表 var ids = _someList.Select(x => x.Thing.Id).Distinct()

构建多个查询的参数时,我在其中几个查询中进行了string.Join(",", ids)

答案最终变得明显:延迟执行。

每个查询在执行string.Join(",", ids)时最终执行了对id的查询(同时),导致重复参数(p_linq_0)。

简单地添加.ToList()以在该行上执行意味着查询具有要使用的ID的具体列表,并且并非都在尝试同时执行此操作。

var ids = _someList.Select(x => x.Thing.Id).Distinct().ToList();

答案 1 :(得分:0)

如果没有看到您的代码,我们就无法弄清楚您的问题是什么。听起来有一些事情可能导致这种情况。不过,我似乎已经发现了一个。我有一个模型,其主键是枚举,所以我这样做:

context.Tests.Where(t => t.TypeId == TestTypeId.SingleTimeWholeClass)

令人费解的是,将比较的每一边都转换为int修复了我的问题:

context.Tests.Where(t => (int)t.TypeId == (int)TestTypeId.SingleTimeWholeClass)

可能与您的问题完全无关。发布代码总是有帮助的。