C# 实体框架中调用存储过程时的字符串准备

C# 实体框架中调用存储过程时的字符串准备,c#,.net,sql,entity-framework,entity-framework-4.1,C#,.net,Sql,Entity Framework,Entity Framework 4.1,实际上,我在VisualStudio2010中有使用EntityFramework4.1的代码。除了一件事之外,一切都很正常:它似乎不像以前的好的[parameters.Add]那样“准备”参数 这是我的密码: using (MyEnterprisesEntities dataContext = new MyEnterprisesEntities(entityBuilder.ToString())) { dataCon

实际上,我在VisualStudio2010中有使用EntityFramework4.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出现这种情况,或者旧方法更可靠

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

如何实际调用存储过程?您是否尝试过传递SqlParameter对象而不是使用字符串?这些方法都没有。存储过程添加到Edmx中,并通过模型浏览器配置到存储过程中。生成复杂类型,并将存储过程插入函数导入。然后它直接在代码中执行,参数与我从Web服务收到的信息一起反馈。更清楚地说,我只是想知道实体框架在构建对存储过程的调用时,在将字符串传递到存储过程之前,负责字符串的准备工作。默认情况下,这将传递参数。只需使用EDMX模型的“添加函数导入”为存储的进程添加函数。SQL分析器帮助我发现,实际上,还有另一个问题最终导致了所有这些糟糕的问题。谢谢你的提示。