我使用实体框架,我的页面中有网格和分页,我为数据源创建了一个sql视图。
我得到的总记录如下,
totalRecords = _data.Database.SqlQuery<int>("select count(*) from MyView " + whereClause, parameters.ToArray()).Single();
我立即调用相同的视图来提取数据以及pagesize和page index。
totalRecords = _data.Database.SqlQuery<int>("select count(*) from FMRQueue " + whereClause, parameters.ToArray()).Single();
var fmrs = _data.Database.SqlQuery<QueueItemModel>(selectQuery, parameters.ToArray()).Skip(displayStartIndex).Take(recordsPerPage).ToList();
抛出"The SqlParameter is already contained by another SqlParameterCollection."
例外。
请帮帮我。
答案 0 :(得分:1)
SqlParameter只能由单个集合拥有。您需要手动克隆参数以将其添加到第二个集合(您的第二个查询)。
这是一个扩展方法“Clone”,它使用内部方法“Copy”来克隆参数。
var clonedParameters = parameters.Select(x => x.Clone()).ToArray();
public static class Extension
{
public static SqlParameter Clone(this SqlParameter @this)
{
var destination = new SqlParameter();
var copyToMethod = typeof (SqlParameter).GetMethod("CopyTo", BindingFlags.Instance | BindingFlags.NonPublic, null, new[] {typeof (DbParameter)}, null);
copyToMethod.Invoke(@this, new[] {destination});
return destination;
}
}