使用实体框架从存储过程检索表数据
本文关键字:检索 数据 存储过程 实体 框架 | 更新日期: 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,但不幸的是,我需要从存储过程中获取数据。那么,我该怎么做呢?
- 您需要将存储过程作为函数导入。右键单击实体模型的工作区,选择
Add -> Function Import
。 - 在"添加函数导入"对话框中,输入您希望在模型中引用的存储过程的名称,例如
GetCountryListSP
,在下拉列表中选择您的过程,并选择该过程的返回值为Entities
,并在下拉列表中选择CountryName
。 -
然后在代码中:
var result = db.GetCountryListSP();//Send parameters too
使用这种方法可以防止返回存储过程的
-1
。 关于实体框架存储过程问题的更多细节,请查看这篇文章。
您可以不导入它。像这样:
var countryList = dbContext.Database.SqlQuery<CountryName>("[GetCountryList]").ToList();
EntityFramework有时不能识别或导入SPs))))所以,这就是为什么我用这个代码片段来节省时间。