[英]context database.sqlQuery<type>() with dynamic parameter list
我有一個sqlQuery / Exec問題。 我的存儲過程返回實體列表。 但是我需要動態添加參數列表。
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);
}
在運行時,應用程序返回該對象類型與內部提供程序不匹配。 我沒有解決這個問題的線索!
嘗試使用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;
}
您可以在第一種方法中動態創建參數對象數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.