小编Myt*_*dia的帖子

实体框架6:有没有办法在不保存内存中的每一行的情况下迭代表

我希望能够遍历实体表中的每一行而不保留内存中的每一行.这是一个只读操作,每行可以在处理后丢弃.

如果有一种方法可以在处理后丢弃该行,那就没问题了.我知道这可以使用DataReader(超出EF的范围)来实现,但它可以在EF中实现吗?

或者有没有办法从EF中获取DataReader而不直接使用SQL?

更详细的例子:

使用EF我可以编码:

foreach (Quote in context.Quotes)
   sw.WriteLine(sw.QuoteId.ToString()+","+sw.Quotation);
Run Code Online (Sandbox Code Playgroud)

但要使用DataReader实现相同的结果,我需要编写代码:

// get the connection to the database
SqlConnection connection = context.Database.Connection as SqlConnection;

// open a new connection to the database
connection.Open();

// get a DataReader for our table
SqlCommand command = new SqlCommand(context.Quotes.ToString(), connection);
SqlDataReader dr = command.ExecuteReader();

// get a recipient for our database fields
object[] L = new object[dr.FieldCount];

while (dr.Read())
{
    dr.GetValues(L);
    sw.WriteLine(((int)L[0]).ToString() + "," + (string)L[1]);
}
Run Code Online (Sandbox Code Playgroud)

区别在于前者耗尽内存(因为它在客户端内存中拉入整个表),后者运行完成(并且速度更快),因为它在任何时候都只在内存中保留一行.

但同样重要的是后一个例子失去了EF的强类型,如果数据库发生变化,就会引入错误.

因此,我的问题是:我们能否在EF中返回强类型行获得类似的结果?

entity-framework entity-framework-6 entity-framework-6.1

8
推荐指数
1
解决办法
8695
查看次数