使用SQL Server命名参数与ExecuteStoreQuery和ExecuteStoreCommand

时间:2012-10-23 16:43:54

标签: sql-server entity-framework

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

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

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

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

我想在实体框架中使用SQL Server命名参数,以便在存储过程中更改参数的顺序时,调用它的实体框架代码不会受到影响。

2 个答案:

答案 0 :(得分:20)

为了使其按预期工作,您需要将查询文本设置为参数化查询。棘手的部分是您只需要确保您的参数的命名与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);

答案 1 :(得分:5)

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