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

本文关键字:检索 数据 存储过程 实体 框架 | 更新日期: 2023-09-27 18:14:12

我正在使用实体框架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; }
}

所以我想以List<CountryName>类型获得SELECT查询的结果

List<CountryName> countryList = null;
using (DbEntities dbContext = new DbEntities())
{
    countryList = //my code to collect the result
}

嗯,我可以直接在表上运行LINQ到SQL,但不幸的是,我需要从存储过程中获取数据。那么,我该怎么做呢?

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

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

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

    使用这种方法可以防止返回存储过程的-1

  4. 关于实体框架存储过程问题的更多细节,请查看这篇文章。

您可以不导入它。像这样:

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

EntityFramework有时不能识别或导入SPs))))所以,这就是为什么我用这个代码片段来节省时间。