我觉得这肯定已经在某个地方得到了解答,而我只是没有正确地查询它,所以我会事先道歉。
我有一个方法,它从服务中获取数百个对象,并使用代码优先方法将它们映射到数据库。现在我将所有对象逐个添加到上下文中,然后在结尾处保存一次。仅需100秒就可以填充大约22秒。所以,真的,我觉得我现在有两个问题......
如果要更新上下文并且有人试图访问该数据(即:从这些表中填充内容的页面。),它是否无法访问?或者它只是以只读方式获取数据?我不必担心更新冲突,只考虑读取概率,所以我假设后者但想要检查。
最好一次填充并保存所有内容,还是在添加每个对象后保存?
谢谢。
答案 0 :(得分:0)
消费者如何获取数据取决于他们用于访问数据库的锁定机制。他们可以选择等待所有对象更新的默认值,或者他们可以选择以只读方式获取内容。
决定是立即更新所有内容还是逐位更新取决于您持有锁定的时间与您希望浪费多少时间来启动新连接之间的权衡。 我的猜测是22秒的数据库写入时间太长,所以你可能想要分割那个工作量。
然而另一方面,100个物体的22秒听起来很长时间,所以你可能会遇到一些性能问题,这会减慢它的速度。
答案 1 :(得分:0)
这可能会回答您的一些问题:
Fastest Way of Inserting in Entity Framework
根据那里的测试,一次保存更好。尝试关闭DbContext中的AutoDetectChanges。您应该看到一个小的性能优势。
只是旁观 - 实体框架在批量插入方面不是很好。考虑使用常规ADO.Net来完成这项工作。