使用实体框架从存储过程中检索表数据

时间:2015-09-24 05:56:18

标签: c# sql-server entity-framework stored-procedures entity-framework-6

我正在使用Entity Framework v6。我有一个存储过程,如下所示

CREATE PROCEDURE [dbo].[GetCountryList] 
(
    @CustomerName VARCHAR(MAX), 
    @SearchCriteria VARCHAR(MAX)
)
AS
    BEGIN
    SET NOCOUNT ON

        SELECT CountryID, CountryName FROM dbo.Table1 
        WHERE CustomerName = @CustomerName AND CountryName = @SearchCriteria
    END

现在我有一个模型类

public class CountryName
{
    public int CountryId { get; set; }
    public string CountryName { get; set; }
}

所以我希望以SELECT类型

获取List<CountryName>查询的结果
List<CountryName> countryList = null;

using (DbEntities dbContext = new DbEntities())
{
    countryList = //my code to collect the result
}

好吧,我本可以直接在桌面上运行LINQ to SQL,但不幸的是我要求从存储过程中获取数据。那么,我该怎么做呢?

2 个答案:

答案 0 :(得分:11)

  1. 您需要将存储过程作为函数导入。右键单击实体模型的工作区区域,然后选择Add -> Function Import
  2. 在“添加功能导入”对话框中,输入您希望在模型中引用存储过程的名称,例如GetCountryListSP,从下拉列表中选择您的过程,然后选择过程的返回值从Entities开始,从下拉列表中选择CountryName
  3. 然后在代码中:

    var result = db.GetCountryListSP();//Send parameters too
    

    使用此方法可以防止返回存储过程的-1。有关Entity Framework存储过程问题的详细信息,请查看this帖子。

答案 1 :(得分:4)

您无需导入即可完成此操作。这样的事情:

var countryList = dbContext.Database.SqlQuery<CountryName>("[GetCountryList]").ToList();

EntityFramework有时无法识别或导入SP)))因此,这就是我使用此代码段节省时间的原因。