我正在尝试在直接调用存储过程或函数时使用带有ObjectContext.ExecuteStoreQuery
和ObjectContext.ExecuteStoreCommand
的SQL Server命名参数。
SQL Server命名参数与实体框架命名参数不同 - 它们允许我执行与此类似的查询:
EXEC sp_GetData @firstParameter = 1, @thirdParameter = 2, @secondParameter = 1
此查询中参数的顺序无关紧要,而与按顺序计算的实体框架命名参数相反。
我想在实体框架中使用SQL Server命名参数,以便在存储过程中更改参数的顺序时,调用它的实体框架代码不会受到影响。
答案 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服务器将在查找您的定义之前首先查看所有系统存储过程,并且在生产过程中看起来速度较慢,并且存在很多存储过程和调用它们。