2013-07-26 60 views
0

我試圖執行存儲過程與EF和變量WHERE子句。實體框架,執行一個存儲過程和變量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

首先,建立一個WHERE像這一條款可以讓你容易受到SQL注入。您可以通過使用LINQ來縮小數據範圍,而不是動態構建的WHERE,從而更安全。

處理它的另一種方法是使用ExecuteStoreQuery方法(這是EF5中的Database.SqlQuery)。這將允許您將存儲過程的結果加載到POCO對象中。你也可以參數化查詢,這可能會使它更安全,這取決於它是如何構建的。