12

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

SQL Server 命名参数与实体框架命名参数不同 - 它们允许我执行与此类似的查询:

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

与按顺序评估的实体框架命名参数相反,此查询中参数的顺序无关紧要。

我想将 SQL Server 命名参数与 Entity Framework 一起使用,这样如果在存储过程中更改了参数的顺序,则调用它的 Entity Framework 代码不会受到影响。

4

2 回答 2

23

为了使其按预期工作,您需要将查询文本设置为参数化查询。棘手的部分是你只需要确保你的参数命名不同于 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);
于 2012-10-25T18:56:33.997 回答
6

仅供参考 - 不要将您的存储过程命名为以 sp_ 开头,因为这是系统存储过程的命名方式。结果是 SQL 服务器会在找到您的定义之前首先查看所有系统存储的过程,并且在生产中看起来会更慢,因为有许多存储的过程和它们的调用。

于 2014-03-20T15:49:53.410 回答