一个名为';p_linq__0';参数集合中已存在.参数集合中的参数名称必须唯一
本文关键字:参数 集合 唯一 存在 linq 一个 | 更新日期: 2023-09-27 17:58:58
这是我从Entity Framework中得到的一个奇怪错误:"参数集合中已经存在一个名为'p_linq_0'的参数。参数名称在参数集合中必须唯一。",没有实体SQL。。。那么为什么会出现这种错误呢?
谢谢。
我遇到了同样的问题-我在自己的Task.Run
s中并行运行了几个查询。
我的每个查询都使用了我正在填充的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();
如果没有看到您的代码,我们不可能弄清楚您的问题是什么。听起来有一些事情可能会导致这种情况。不过,我似乎发现了一个。我有一个模型,它的主键是枚举,所以我这样做:
context.Tests.Where(t => t.TypeId == TestTypeId.SingleTimeWholeClass)
令人费解的是,将比较的每一边都转换为int解决了我的问题:
context.Tests.Where(t => (int)t.TypeId == (int)TestTypeId.SingleTimeWholeClass)
可能与你的问题完全无关。张贴代码总是有帮助的。