我正在尝试使用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
有人有个主意吗?
由于 马库斯
答案 0 :(得分:0)
首先,创建这样的WHERE子句可能会让您容易受到SQL注入攻击。通过使用LINQ缩小数据范围而不是动态构建的WHERE,您可以更安全地使用它。
另一种处理方法是使用ExecuteStoreQuery方法(这是EF5中的Database.SqlQuery)。这将允许您将存储过程的结果加载到POCO对象中。您还可以参数化查询,这可能会使其更安全,具体取决于它的构造方式。