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

Mor*_*ori 6 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();
  }
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Axd*_*der 9

嗨SqlParameter是可克隆的.试试这个:

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

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

  • 谢谢!不知道为什么visual studio无法识别x.Clone()方法.所以我把它改成了Select(x =>((ICloneable)x).Clone()).ToArray()).ToList()它就像一个魅力. (5认同)