2013-05-14 24 views
1

我有一個sqlQuery/Exec的問題。我的存儲過程返回實體列表。但我需要動態追加參數列表。上下文data​​base.sqlQuery <type>()與動態參數列表

 using (MyContext db = new MyContext()) 
     { 
      var queryParam = new Dictionary<String, String>(); 
      var arg = String.Empty; 
      var argList = new List<ObjectParameter>(); 
      var sql = String.Empty; 

      foreach(var line in param.Split(',')) 
      {  
       var obj = line.Split(':'); 
       if (obj.Length < 2) 
       { 
        continue; 
       } 

       if (obj[1].Equals(String.Empty)) 
       { 
        continue; 
       } 

       // arg = arg + "@" + obj[0] + "=" + "'" + obj[1] + "' "; 
       argList.Add(new ObjectParameter(obj[0], obj[1])); 
      } 

      object[] prm = argList.ToArray(); 

      // Stored procedure ausführen und ergebniss erhalten. 
      var list = db.Database.SqlQuery<Dokument>("EXEC dbo.spDokumente", prm).ToList(); 
      return AppServerHelper.AppResponse(list); 
     } 

在運行時,應用程序返回對象類型不匹配ne內部提供者。 我沒有線索來解決這個問題!

回答

0

嘗試使用SqlParameter而不是ObjectParameter。請按照以下示例代碼:

public List<MyCustomObject> SelectLoad(DateTime parameter1, DateTime parameter2) 
{   
     return Execute("MyStoredProcedure @Parameter1, @Parameter2", 
      new object[]{new SqlParameter("@Parameter1", parameter1), 
      new SqlParameter("Parameter2",parameter2)}); 
} 

private List<MyCustomObject> Execute(string query, object[] parameters) 
{ 
    var output = new List<MyCustomObject>(); 
    using (var dbContext = new MyEntityFrameworkDataContext()) 
    { 
    output = dbContext.Database.SqlQuery<MyCustomObject>(query, parameters).ToList(); 
    } 
    return output;   
} 

您可以在第一個方法中動態創建參數對象數組。