【发布时间】:2014-04-22 10:05:16
【问题描述】:
我有一个 DbContext (Entity Framework 6.0) 和 1,000 个对象。
对于每个对象,我开始将其保存到数据库中或使用相同的 DbContext 使用单独的线程/任务更新其数据。
这是我得到的:
- 对于线程:EntityCommandExecutionException - 已经有一个打开的 DataReader 与此命令关联,必须先关闭它。此异常发生在第二次广告启动后。
- 对于任务:一切都很好。添加/更新所有对象。
我知道由于使用了相同的 DbContext 对象并多次调用它,所以我得到了线程异常。但我不确定。
问题:为什么我会在这里得到线程的差异和异常?
我不太了解任务和 TPL 库。我之前在几个小型项目中使用过 Thread。
【问题讨论】:
-
无论如何,您都不能在多个线程中同时使用 same
DbContext。检查this。 -
是的,我明白了,但我不明白任务如何与 DbContext 一起工作...
-
对于任务:一切都很好。所有对象都被添加/更新。 - 不同的任务可能在同一个线程上运行,在这种情况下
DbContext工作得很好。你可以在这里阅读 TPL:stackoverflow.com/tags/task-parallel-library/info
标签: c# multithreading entity-framework task-parallel-library task