我正在尝试使用 EF 版本 6.1.1 在 C# 中使用实体框架转储数据库表。我期待 foreach 循环一次加载每一行,但它会逐渐加载每一行,然后内存不足。
foreach (Quote L in context.Quotes)
sw.WriteLine(
"INSERT INTO [dbo].[Quote] ([QuoteId], [BookId], [VerbTenseId], [Form], [Quotation]) VALUES (%1,%2,%3,N'%4',N'%5')",
L.QuoteId, L.BookId, L.VerbTenseId, L.Form, L.Quotation);
在上面的代码中,context 是已经初始化到我的数据库的 DatabaseContext,而 Quotes 是 Quote 记录的有效表。我正在尝试将每条记录转储到文件中进行备份。显然(如前所述)我可以放弃实体框架并使用 DataReader 来迭代数据库表,但框架确实允许迭代太大而无法放入内存的表。
是否有一种优雅的方式(可能是某处上下文中的标志)可以允许这样做?
通常,结果集很小(几千),但在这种情况下它会达到数百万。
似乎有一些选项适用于框架的早期版本,但除非我误解,否则这些方法和标志不再存在。
这只是测试代码,而不是常规的数据库备份。我不是在寻找更好的方式来表达我的代码。我正在寻找一种优雅的方式来使用 EF。如果 EF 只是缺少这种支持,那就是我的答案。
请不要混淆示例,如果有办法使用 EF 枚举数据库表而不将每一行加载到内存中并将其保留在那里,请回答。我可以编写其他示例,并提供其他选项来实现数据库备份。这只是一个例子。