2015-06-01 28 views
3

我想參數化動態查詢,並首先在實體框架代碼中使用SqlQuery方法運行它。獲取「SqlParameter已被另一個SqlParameterCollection包含」。錯誤,同時使用SqlQuery命令

我第一次執行類SqlQuery它能正常工作,所以我相信有什麼不對的查詢或參數,但我立刻執行與相同參數第二次相同的命令,我得到這個錯誤

「SqlParameter已被另一個SqlParameterCollection包含。」

由於我已經在這裏使用ToList()方法,我不知道原因可能是什麼!

這裏是模擬的代碼。

using (var context = Common.GetDbContext()) 
    { 
     var parameters = new List<SqlParameter>(); 

     //populating parameters here... 

     var sqlQuery = "Select * from MyTable where [email protected] and And [email protected]"; 

     // first time 
     var result = context.Database.SqlQuery<ResultType>(sqlQuery, parameters.ToArray()).ToList(); 
     //second time 
     result = context.Database.SqlQuery<ResultType>(sqlQuery, parameters.ToArray()).ToList(); 
    } 

任何想法?

+1

你必須爲每個查詢 – AxdorphCoder

回答

5

嗨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

+4

由於創建一個新的SqlParameter實例!不知道爲什麼Visual Studio無法識別x.Clone()方法。所以我將它改爲Select(x =>((ICloneable)x).Clone())。ToArray())。ToList()和它的作用就像一個魅力。 – Mori

相關問題