【问题标题】:String preparation when calling stored procedure in Entity Framework在实体框架中调用存储过程时的字符串准备
【发布时间】:2012-10-29 13:51:07
【问题描述】:

实际上,我的代码在 Visual Studio 2010 中使用了 Entity Framework 4.1。除了一件事之外,一切都运行良好:它似乎没有像以前的 [parameters.Add] 习惯性地那样“准备”参数。

这是我的代码:

using (MyEnterprisesEntities dataContext = new 
                             MyEnterprisesEntities(entityBuilder.ToString()))
{
         dataContext.CompanyInitializer(connection.Catalog,
                                        args.CompanyId,
                                        args.CompanyName);
}

所以,如果我的公司名称是O'Brian and sons(实际上它是通过 WCF Web 服务传递的,所以更多的是这种形式:O\'Brian and sons),它似乎破坏了我的存储过程(包括允许 SQL 注入的可能性)。

有没有办法使用 EDMX 避免这种情况,或者旧方法更可靠?

【问题讨论】:

  • 你如何实际调用存储过程?您是否尝试过传递 SqlParameter 对象而不是使用字符串?
  • 没有这些方法。存储过程被添加到 Edmx 中,并通过模型浏览器配置到存储过程中。生成一个复杂类型并将存储过程插入到函数导入中。然后直接在代码中执行,参数由我从 Web 服务收到的信息提供。
  • 为了更清楚,我只是想知道实体框架在构建对存储过程的调用时是否会在将字符串传递给存储过程之前处理字符串准备工作。
  • 这是默认传递参数的。只需使用 EDMX 模型的“添加功能导入”来为您的存储过程添加功能。它应该可以工作。

标签: c# .net sql entity-framework entity-framework-4.1


【解决方案1】:

在调用存储过程之前,您不需要做任何事情。 为了帮助您,请启动 SQL Profiler 以查看发送到数据库的参数是什么。 我运行了一些测试,如果我使用像 O'Brian 这样的参数,框架会自动将查询中的引号加倍到 SQL。

【讨论】:

  • SQL Profiler 帮助我发现实际上,还有另一个问题最终导致了所有这些糟糕的问题。感谢您的提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多