2016-03-03 50 views
0

我使用實體框架,我的頁面中有分頁的網格,並且我爲數據源創建了一個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."異常。

請幫我一把。

回答

1

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

感謝您的回覆喬納森 – Karthikeyan