[EF报错]另一个 SqlParameterCollection 中已包含 SqlParameter

封装分页查询的时候为了防止sql注入,使用SqlParameter来传递参数

queryParameter.Count = Convert.ToInt32(DbContext.Database.ExecuteScalar(sqlpage, param.ToArray()));
strsql.Append($@" order by {queryParameter.sidx} {queryParameter.sord} offset {(queryParameter.pageNum - 1) * queryParameter.pageSize} rows fetch next {queryParameter.pageSize} rows only");
return Query<TEntity>(strsql.ToString(), param.Select(x=>((ICloneable)x).Clone()).ToArray()).AsQueryable();

程序走到return的时候抛出异常: 另一个 SqlParameterCollection 中已包含 SqlParameter
原因是:垃圾回收机制并没有将IDbCommand临时对象即时的回收,而且该对象绑定的Parameter集合也存在,所以导致出现两个SqlParameter
解放方案:在第二次执行sql之前释放清空SqlParameter

return Query<TEntity>(strsql.ToString(), param.Select(x=>((ICloneable)x).Clone()).ToArray()).AsQueryable();
posted @ 2021-05-12 15:09  寒风中亦温暖  阅读(255)  评论(0)    收藏  举报