实体框架,执行存储过程和变量WHERE子句

时间:2013-07-26 08:30:47

标签: entity-framework stored-procedures dynamic where-clause

我正在尝试使用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

有人有个主意吗?

由于 马库斯

1 个答案:

答案 0 :(得分:0)

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

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