获取" SqlParameter已被另一个SqlParameterCollection包含。"使用SqlQuery命令时出错

时间:2015-06-01 14:01:18

标签: entity-framework code-first

我正在尝试参数化动态查询并首先在Entity Framework代码中使用SqlQuery方法运行它。

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

  

" SqlParameter已经包含在另一个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();
  }

有什么想法吗?

1 个答案:

答案 0 :(得分:8)

嗨,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