我在进程中插入/更新了大量实体(~5000),这需要花费大量时间(在5分钟的事务中超时)。
我读到默认情况下DBContext.AutoDetectChangesEnabled设置为ON并导致这种行为(http://www.exsertus.be/2014/10/ef-bulk-performance/)。
根据我的理解,Devforce"有点"在每个EntityManager中封装DBContext。 Devforce使用它自己的实现,除非我定义我做了什么。我想知道如何才能访问它以便能够播放"使用此属性AutoDetectChangesEnabled。
或者是否有其他解决方案可以使用Devforce插入/更新/删除大量实体?
此致
答案 0 :(得分:1)
我使用过这个EF工具" https://www.nuget.org/packages/EFUtilities"并且我通过大型插入获得了很大的性能提升,因为它使用批量复制而不是每个实体的普通插入。
您可以查看Github here的文档。
我已将它与17,000个实体插入事务一起使用,并在几秒钟内完成。 检查这一点以便更好地理解和与EF进行比较。 http://blog.credera.com/technology-insights/microsoft-solutions/entity-framework-batch-operations-using-ef-utilities/
使用该实用程序插入实体列表的示例如下:
using (var db = new YourDbContext())
{
EFBatchOperation.For(db, db.BlogPosts).InsertAll(list);
}
希望这会有所帮助。
答案 1 :(得分:0)
由于您已经定义了自己的DbContext,因此可以使用Configuration.AutoDetectChangesEnabled = false;
但是,我不确定这种改变会有多大帮助。如果您的应用程序是n层,并且您尝试通过线路保存~5000个实体,这将总是很慢,并且您还会遇到通信超时。通常,如果您需要进行任何批量操作,DevForce不是最佳方法。