这是我从Entity Framework获得的一个奇怪的错误:“参数集合中已存在名为'p_ linq _0'的参数。参数集中的参数名称必须是唯一的。”我没有做任何自定义参数或任何花哨的东西,简单的直接LINQ查询或存储过程执行,没有什么花哨,没有什么特别的,没有实体SQL ...所以为什么会发生这种错误?
感谢。
答案 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)
可能与您的问题完全无关。发布代码总是有帮助的。