c# - Entity Framework 从存储过程获取非实体对象

标签 c# entity-framework stored-procedures

我正在使用 Entity Framework 6。

我想运行一个返回非实体对象的存储过程(每行 3 列)

using(var dbContext = new DBContextEntity())
{
    var queryProducts = dbContext.Database.SqlQuery<DataTable>("dbo.GetProductByDesc @q", query);                
}

如何以 DataSet 或匿名对象的形式获取数据以便我可以迭代它?

最佳答案

据我所知,EntityFramework 不提供匿名对象具体化。原因是它可能为每种类型生成 IL 代码并缓存它(或者只是执行普通的 PropertyInfo 缓存)。

解决方案是创建一个简单的类,其属性需要与存储过程结果集的名称相匹配,并将此类用作 SqlQuery 的通用参数。

编辑:

SqlQuery 实现 IEnumerable,当您迭代它时,它会在当前线程中自动执行。要迭代结果,您可以例如:

foreach(var product in queryProducts)
{
   // do something with each product here
}

您还可以将产品类实例列表传递给需要它的函数:

ShowProducts(queryProducts.ToList());

您还可以让查询在后台运行,并在完成后返回一个产品列表,有关异步获取的更多信息可以找到 here: http://www.codeguru.com/csharp/.net/net_framework/performing-asynchronous-operations-using-entity-framework.htm

关于c# - Entity Framework 从存储过程获取非实体对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27483135/

相关文章:

stored-procedures - 使用存储过程时使用 Telerik MVC 网格进行分页

c# - 警告 CS8600 将 null 文字或可能的 null 值转换为不可为 null 的类型

c# - 为什么 EF 代码优先生成无关的外键列?

C# LINQ 多行条件

sql - 如何识别 where 子句匹配的模式

MySQL:存储过程慢

c# - Regex.Replace 仅替换字符串的开头

c# - 当我真的需要继承两个类时如何处理CS1721?

.NET Entity Framework "remembering"数据库名称不存在

entity-framework - Entity Framework : Querying Child Entities