【发布时间】:2012-03-07 17:28:28
【问题描述】:
我正在使用循环从在线数据填充我的数据库(简化,没有错误检查):
foreach (var catalog in catalogs)
{
var result = Items(catalog, state, context);
while (result != null)
{
result.ForEach(r => context.DbContext.Items.Add(r));
context.DbContext.SaveChanges();
result = Items(catalog, state, context);
}
}
代码需要一些时间从服务器获取 XML 响应并将其解码为 XElement,在响应流上使用 XElement.Load。它被解码成一个包含最多 50 个项目的项目列表 - 这是我在每个循环传递中从服务器请求的内容。由于 SaveChanges 调用,该块立即保存到表中..
8/10 的循环时间用于将项目添加到 DbContext 或 SaveChanges 调用或两者上。与远程服务器通信并将响应 XML 解码为实体列表是 2/10。
如何提高将数据存储到数据库中的效率,同时仍然使用 EF?
我知道我可以从 XML 批量加载数据库,但这将迫使我找出我需要编写的 SQL 语句,因为几个相关的表会通过上面的 SaveChanges 调用进行更新,所以我开始丢失使用 EF 的优势。
【问题讨论】: