为了账号安全,请及时绑定邮箱和手机立即绑定

使用Entity Framework从存储过程中获取数据

使用Entity Framework从存储过程中获取数据

C#
犯罪嫌疑人X 2019-08-13 16:37:02
使用Entity Framework从存储过程中获取数据我试图获取内容一个表,其中包含从数据库上下文对象调用的动态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然后我用来执行存储过程的C#代码是:var db = new MyEntities();var TEST_SEARCH_TERM = "product";var result = db.SearchProducts(TEST_SEARCH_TERM);MyGridView.DataSource = result;MyGridView.DataBind();执行时,在Visual Studio的数据库资源管理器中,存储过程正常工作。但是当在运行的ASP.NET应用程序中执行时,我在DataBind()方法中得到一个异常,因为result返回-1而不是IEnumerable DataSet包含由存储过程的SELECT产生的对象。如何检索数据并填充我的数据GridView?
查看完整描述

3 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

使用以下步骤解决此问题:

  1. 您需要将存储过程作为函数导入。右键单击实体模型的工作区区域,然后选择Add -> Function Import

  2. 在“添加功能导入”对话框中,输入您希望在模型中引用存储过程的名称,例如Search_Products,从下拉列表中选择您的过程,然后选择要返回的过程值,并从下拉列表中进行Entities选择Products。名单。

  3. 然后在代码背后:

    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
  4. MyGridView.DataSource = result;MyGridView.DataBind();

您获得-1结果的原因是实体框架不能支持开箱即用的存储过程返回值。我认为对存储过程返回值的支持取决于Entity框架的版本。实体框架也没有丰富的存储过程支持,因为它是一个ORM,而不是SQL替代品。


查看完整回答
反对 回复 2019-08-13
  • 3 回答
  • 0 关注
  • 439 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信