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

Ale*_*Pop 11 sql-server entity-framework

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

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

EXEC sp_GetData @firstParameter = 1, @thirdParameter = 2, @secondParameter = 1
Run Code Online (Sandbox Code Playgroud)

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

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

Jos*_*osh 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);
Run Code Online (Sandbox Code Playgroud)


Rob*_*ann 5

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