实体框架:另一个 sql 集合已包含的 sql 参数



我使用实体框架,我的页面中有带有分页的网格,并且我为数据源创建了一个sql视图。

我得到的总记录如下,

totalRecords = _data.Database.SqlQuery<int>("select count(*) from MyView " + whereClause, parameters.ToArray()).Single();

我立即调用相同的视图来提取数据以及页面大小和页面索引。

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."异常。

请帮帮我。

SqlParameter 只能由单个集合所有者。需要手动克隆参数以将其添加到第二个集合(第二个查询)。

这是一个扩展方法"克隆",

它使用内部方法"复制"来克隆参数。

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;
    }
}

最新更新