1

我正在尝试使用 EF 和变量WHERE子句执行存储过程。

我首先想到的是:

ALTER PROCEDURE SP  
   @WHEREClause VARCHAR(250)
AS
BEGIN
   SET NOCOUNT ON;
   DECLARE @SQL Varchar(8000)
   SET @SQL ='Select ...' + @WHEREClause 
   EXEC(@SQL)
END

这里的问题 EF 将不再识别存储过程中的选定值。

所以我想到了这样的事情:

ALTER PROCEDURE SP  
    @WHEREClause VARCHAR(250)
AS
BEGIN
    SET NOCOUNT ON;
    Select ... FROM ... @WHEREClause 
END

有人有想法吗?

谢谢马库斯

4

1 回答 1

0

首先,像这样创建 WHERE 子句可能会使您容易受到 SQL 注入的攻击。您可以通过使用 LINQ 来缩小数据范围而不是动态构建的 WHERE 来更安全地执行此操作。

处理它的另一种方法是使用ExecuteStoreQuery方法(这是 EF5 中的 Database.SqlQuery)。这将允许您将存储过程的结果加载到 POCO 对象中。您还可以对查询进行参数化,这可能使其更安全,具体取决于查询的构造方式。

于 2013-07-26T10:45:03.937 回答