使用 SqlQuery 命令时出现 "The SqlParameter is already contained by another SqlParameterCollection." 错误

Getting "The SqlParameter is already contained by another SqlParameterCollection." error while using SqlQuery command

我试图参数化一个动态查询,运行 它首先在 Entity Framework 代码中使用 SqlQuery 方法。

我第一次执行 SqlQuery 时,它按预期工作,所以我确信查询或参数没有任何问题,但我立即第二次使用相同的参数执行相同的命令,但我收到此错误

"The SqlParameter is already contained by another SqlParameterCollection."

因为我已经在这里使用了ToList()方法,所以我不知道是什么原因!

这里是模拟代码。

using (var context = Common.GetDbContext())
   {
        var parameters = new List<SqlParameter>();

         //populating parameters here...

         var sqlQuery = "Select * from MyTable where UserId=@p1 and And Active=@p2";

         // first time
         var result = context.Database.SqlQuery<ResultType>(sqlQuery, parameters.ToArray()).ToList();
         //second time
         result = context.Database.SqlQuery<ResultType>(sqlQuery, parameters.ToArray()).ToList();
  }

有什么想法吗?

您好,SqlParameter 是可克隆的。试试这个:

result = context.Database.SqlQuery<ResultType>(sqlQuery, parameters.Select(x => x.Clone()).ToArray()).ToList();

https://msdn.microsoft.com/en-us/library/vstudio/bb338957%28v=vs.100%29.aspx