如何访问EntityManager中使用的DBContext?

时间:2014-12-02 11:10:26

标签: c# .net performance entity-framework devforce

我在进程中插入/更新了大量实体(~5000),这需要花费大量时间(在5分钟的事务中超时)。

我读到默认情况下DBContext.AutoDetectChangesEnabled设置为ON并导致这种行为(http://www.exsertus.be/2014/10/ef-bulk-performance/)。

根据我的理解,Devforce"有点"在每个EntityManager中封装DBContext。 Devforce使用它自己的实现,除非我定义我做了什么。我想知道如何才能访问它以便能够播放"使用此属性AutoDetectChangesEnabled。

或者是否有其他解决方案可以使用Devforce插入/更新/删除大量实体?

此致

2 个答案:

答案 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;

在DbContext构造函数中更改此属性设置

但是,我不确定这种改变会有多大帮助。如果您的应用程序是n层,并且您尝试通过线路保存~5000个实体,这将总是很慢,并且您还会遇到通信超时。通常,如果您需要进行任何批量操作,DevForce不是最佳方法。