2

我觉得这一定是在某个地方得到了回答,我只是没有正确地查询它,所以我会提前道歉。

我有一种方法可以从服务中获取数百个对象,并使用代码优先方法将它们映射到数据库。现在我将所有对象一个一个地添加到上下文中,然后在最后保存一次。只有 100 个,填充大约需要 22 秒。所以,真的,我想我现在有两个问题......

  1. 如果要更新上下文并且有人试图访问该数据(即:填充这些表中的内容的页面。),它会无法访问吗?还是只是以只读方式获取数据?我不必担心更新冲突,只需担心读取概率,所以我假设后者但想检查一下。

  2. 是一次填充和保存所有内容更好,还是在添加每个对象后保存?

谢谢你。

4

2 回答 2

0

这可能会回答您的一些问题:

在实体框架中插入的最快方式

根据那里的测试,最好一次保存所有内容。尝试关闭 DbContext 中的 AutoDetectChanges。您应该会看到一点性能优势。

顺便说一句 - 实体框架在批量插入方面并不出色。考虑使用常规 ADO.Net 来完成这项工作。

于 2013-07-24T18:44:49.187 回答
0

消费者如何获取数据取决于他们用于访问数据库的锁定机制。他们可以选择等待所有对象更新的默认设置,或者他们可以选择以只读方式获取某些内容。

决定是一次更新还是一点点更新取决于你持有锁的时间和你想浪费多少时间开始新连接之间的权衡。我的猜测是 22 秒的数据库写入时间太多了,因此您可能希望拆分该工作负载。

然而另一方面,100 个对象的 22 秒听起来很长,所以你可能会遇到一些性能问题来减慢速度。

于 2013-07-24T16:04:14.307 回答