C# 如何访问EntityManager中使用的DBContext?

C# 如何访问EntityManager中使用的DBContext?,c#,.net,performance,entity-framework,devforce,C#,.net,Performance,Entity Framework,Devforce,我在一个过程中插入/更新了大量的实体(~5000),这需要花费大量的时间(5分钟事务超时) 我了解到,默认情况下,DBContext.AutoDetectChangesEnabled设置为ON并导致这种行为() 据我所知,Devforce“某种程度上”在每个EntityManager中封装了一个DBContext。Devforce使用它自己的实现,除非我定义了我自己的实现。我想知道如何访问它才能“玩”这个属性AutoDetectChangesEnabled 或者是否有其他解决方案可以使用Devf

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

我了解到,默认情况下,DBContext.AutoDetectChangesEnabled设置为ON并导致这种行为()

据我所知,Devforce“某种程度上”在每个EntityManager中封装了一个DBContext。Devforce使用它自己的实现,除非我定义了我自己的实现。我想知道如何访问它才能“玩”这个属性AutoDetectChangesEnabled

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


关于

我使用过这个EF工具“”,我通过大插入获得了巨大的性能增强,因为它使用大容量复制而不是每个实体的普通插入

您可以查看Github的文档

我将它用于17000个entities insert事务,它在几秒钟内完成了它。 检查此项以更好地理解和比较EF。

使用该工具插入实体列表的示例如下:

using (var db = new YourDbContext())
{
    EFBatchOperation.For(db, db.BlogPosts).InsertAll(list);
}

希望这有帮助

因为您已经定义了自己的DbContext,所以可以使用
Configuration.AutoDetectChangesEnabled=false在DbContext构造函数中更改此属性设置


然而,我不确定这一改变会有多大帮助。如果您的应用程序是n层的,并且您试图通过网络保存约5000个实体,那么这将总是很慢,并且您还将遇到通信超时。通常,如果您需要执行任何批量操作,DevForce不是最佳方法。

不幸的是,我不能使用此方法,因为我需要主键修复您的意思是生成您的ID?如果是这种情况,那就没关系了,因为该工具可以处理实体,但不会将它们附加到上下文中并逐个保存,而是一次将它们全部推送。这个库绝对值得一试。@kdev我想你的意思是你实际上在插入两个表,并且需要将子行指向它们的父行?如果要为父级使用数据库生成的id,这是一个很难解决的问题。(在这些情况下,我总是切换到guid或类似版本)。@kdev如果您使用插入的实体的相关部分更新您的问题,我可能会提供帮助。我是EFUtilities的作者,所以我一直在思考这些案例。嗨,kim。考虑到所有应用程序/模型都基于devforce,最好的方法是什么?我还注意到,当我调用SavesChanges()时,我可以等待1分钟以上才能看到第一个SQL订单被发送到SQL server,为什么生成SQL这么长。我不知道是谁生成的,Devforce还是EF…EF生成了SQL,但是可能会有更多的事情发生,而不仅仅是SQL生成会让它变慢。虽然我对它们没有任何经验,但如果批量操作不是主应用程序的一部分,我会考虑使用EF实用程序。如果您想让iDeaBrade的人员进一步了解这一点,请通过web支持表单打开技术支持案例。