正如问题所要求的那样。我正在为我的大多数代码使用实体框架,但我还需要执行并返回不在我的实体框架上下文中的sql表中的一个或多个列。
答案 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支持。