【问题标题】:Using SQL Server named parameters with ExecuteStoreQuery and ExecuteStoreCommand将 SQL Server 命名参数与 ExecuteStoreQuery 和 ExecuteStoreCommand 一起使用
【发布时间】:2012-10-23 16:43:53
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: sql-server entity-framework


    【解决方案1】:

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

    【讨论】:

    • 在我找到您的回复后感到很幸运,它就像一个魅力。
    • 这需要更多的牵引力......这是处理调用 SP 而不依赖于 SP 中的参数顺序的最佳方式
    【解决方案2】:

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

    【讨论】:

    • 我同意命名建议,但由于数据库中存储的 proc 数量或用于这些的命名约定,SQL Server 性能不会受到负面影响。
    猜你喜欢
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多