使用Entity Framework從存儲過程中獲取數據我試圖獲取內容一個表,其中包含從數據庫上下文對象調用的動態(tài)SQL存儲過程(使用Entity Framework 6.1.1),以便填充GridView控件。我無法檢索數據。這是存儲過程。這是一個學生演示存儲過程中的SQL注入,所以我知道這是可注入的,它沒關系。ALTER PROCEDURE dbo.SearchProducts
@SearchTerm VARCHAR(max)ASBEGIN
DECLARE @query VARCHAR(max)
SET @query = 'SELECT * FROM dbo.Products WHERE Name LIKE ''%' + @SearchTerm + '%'''
EXEC(@query)END然后我用來執(zhí)行存儲過程的C#代碼是:var db = new MyEntities();var TEST_SEARCH_TERM = "product";var result = db.SearchProducts(TEST_SEARCH_TERM);MyGridView.DataSource = result;MyGridView.DataBind();執(zhí)行時,在Visual Studio的數據庫資源管理器中,存儲過程正常工作。但是當在運行的ASP.NET應用程序中執(zhí)行時,我在DataBind()方法中得到一個異常,因為result返回-1而不是IEnumerable DataSet包含由存儲過程的SELECT產生的對象。如何檢索數據并填充我的數據GridView?
3 回答

慕標5832272
TA貢獻1966條經驗 獲得超4個贊
使用以下步驟解決此問題:
您需要將存儲過程作為函數導入。右鍵單擊實體模型的工作區(qū)區(qū)域,然后選擇
Add -> Function Import
。在“添加功能導入”對話框中,輸入您希望在模型中引用存儲過程的名稱,例如
Search_Products
,從下拉列表中選擇您的過程,然后選擇要返回的過程值,并從下拉列表中進行Entities
選擇Products
。名單。然后在代碼背后:
var db = new MyEntities();var TEST_SEARCH_TERM = "product";var result = db.Search_Products(TEST_SEARCH_TERM);//Search_Products is the name that you specified in Function Import dialog
MyGridView.DataSource = result;MyGridView.DataBind();
您獲得-1
結果的原因是實體框架不能支持開箱即用的存儲過程返回值。我認為對存儲過程返回值的支持取決于Entity框架的版本。實體框架也沒有豐富的存儲過程支持,因為它是一個ORM,而不是SQL替代品。
- 3 回答
- 0 關注
- 463 瀏覽
添加回答
舉報
0/150
提交
取消