我正在尝试参数化动态查询并首先在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();
}
有什么想法吗?
答案 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