我正在开发一项服务,每次运行时,都必须插入数千条数据库记录(它会读取一些文档,提取参数,然后将这些参数存储到数据库中)。当涉及到几百个时,没有大问题,但随着更多记录的插入,它会变慢。据我所知,这背后的主要原因是我的DbContext跟踪我的对象以找到任何可能的修改,并提交一个关于“SaveChanges()”调用的更新,因此,在有了一定的对象的数量,它将开始降低其速度,因为它需要跟踪越来越多的对象。 我知道在某一点之后,我可以摆脱我的DbContext从头开始,因为我不再需要跟踪这些实体,所以我在我的存储库类中尝试了类似的东西(它只会做它符合我的标准处理它时:)
_dbContext.Dispose();
_dbContext = new DbContext("connectionName");
但是,如果我这样做,下次当我尝试访问数据库时,我得到一个例外,说我的DbContext已被处理掉了。 我还尝试了在不首先处理它的情况下分配DbContext的新实例,例如:
_dbContext = new DbContext("connectionName");
但通过这样做,它仍然保留_dbContext变量中的所有对象。 由于有很多实体,我认为从DbContext中单独删除每个对象比从头创建一个新的DbContext要慢,但我不明白为什么它没有分配新的DbContext实例(在处理之前没有一,也不只是分配一个新实例。)
编辑:只是为了让您了解我想要达到的目标。我实际上希望DbContext能够跟踪我的对象,但是在某一点之后,我不再需要跟踪某些对象了,我希望它能够跟踪一堆新对象。就像说“忘记你所知道的一切,现在你只关心你会收到的新物品”。例如,假设我正在为客户处理文件,一旦我完成处理这些文件,服务将迭代下一个客户,但此时,我并不真正关心跟踪对象以前的客户,因为我们可能会谈论几百或几千个对象(多个参数和不同的实体被插入到数据库中),我认为从头开始创建一个新的DbContext可能会更好,而不是迭代我的所有对象都要将它们从我当前的DbContext中删除。