2012-10-23 19 views
9

我试图在直接调用存储过程或函数时使用带有ObjectContext.ExecuteStoreQueryObjectContext.ExecuteStoreCommand的SQL Server命名参数。使用带有ExecuteStoreQuery和ExecuteStoreCommand的SQL Server命名参数

SQL Server命名参数不能与实体框架命名参数是相同的 - 他们让我来执行类似的查询这一个:

EXEC sp_GetData @firstParameter = 1, @thirdParameter = 2, @secondParameter = 1 

的参数在此查询的顺序并不重要,与实体框架命名参数相反,这些参数按顺序进行评估。

我想在实体框架中使用SQL Server命名参数,这样如果参数的顺序在存储过程中发生更改,调用它的实体框架代码将不受影响。

回答

15

为了使它按照您的预期工作,您需要将查询文本设置为参数化查询。最棘手的部分是,你只需要确保你的参数比SP参数不同的名称:

var cmdText = "[DoStuff] @Name = @name_param, @Age = @age_param"; 
var @params = new[]{ 
    new SqlParameter("name_param", "Josh"), 
    new SqlParameter("age_param", 45) 
}; 

ObjectContext.ExecuteStoreQuery<MyObject>(cmdText, @params); 
+0

我发现你的回应后感觉很幸运,它像一个魅力。 – Signcodeindie

+0

这需要更多的牵引力......这是处理呼叫SP的最佳方式,而不依赖SP中参数的顺序 – mmcrae

4

仅供参考 - 不要对你的存储过程,开始以sp_因为这是系统存储的特效是如何命名的。其结果是SQL服务器会在查找您的定义之前首先查看所有系统存储的特效,并且在许多存储特效和调用它们的生产中似乎会变慢。

相关问题