如何使用Entity Framework 6.1返回dataReader?

时间:2015-07-10 08:31:31

标签: c# asp.net .net entity-framework entity-framework-6

正如问题所要求的那样。我正在为我的大多数代码使用实体框架,但我还需要执行并返回不在我的实体框架上下文中的sql表中的一个或多个列。

2 个答案:

答案 0 :(得分:5)

您可以使用实体框架运行raw query,例如:

using (var context = new BloggingContext()) 
{ 
    var blogNames = context.Database.SqlQuery<string>( 
                       "SELECT Name FROM dbo.Blogs").ToList(); 
}

如果要返回更复杂的类型,可以定义自己的类并使用它。只要属性与您选择的列的名称匹配,它就可以工作。所以让我们上课:

public class MyClass
{
    public int Id { get; set; }
    public string UserName { get; set; }
}

并使用它:

List<MyClass> result = ctx
    .Database.SqlQuery<MyClass>("SELECT Id, UserName FROM dbo.Users")
    .ToList();

答案 1 :(得分:0)

IDataReader的重点是通过数据传输数据,因为它通过线路返回(例如TCP / IP),因此不会产生将其全部填充到内存中的开销。如果你正在处理数百万行,那么将所有内容读入内存是一个坏主意。如果是这种情况,那么从EF API获取底层连接字符串并使用ADO.NET。那里也有更好的Aysnc支持。