c# - 在多线程程序中使用 EF 的好建议?

标签 c# .net entity-framework multithreading locking

对于在多线程程序中使用 EF,您有什么好的建议吗?

我有 2 层:

  • 用于读取/写入我的数据库的 EF 层
  • 使用我的实体(读/写)并进行一些计算的多线程服务(我在框架中使用任务并行库)

如何在每个线程中同步我的对象上下文? 你知道让它发挥作用的好模式吗?

最佳答案

好的建议是 - 只是不要 :-) EF 勉强在一个线程中存活 - 野兽的本性。

如果你绝对必须使用它,制作最轻的 DTO-s,一旦你有数据就关闭 OC,重新打包数据,产生你的线程只是为了做计算而不是别的,等到它们完成,然后创建另一个 OC 并将数据转储回 DB,协调它等。

如果另一个“主”线程(通过 TPL 生成 N 个计算线程的线程)需要知道某个线程何时完成触发事件,只需在另一个线程中设置一个标志,然后让它的代码检查其中的标志循环并通过创建新的 OC 使用react,然后在必要时协调数据。

如果您的情况更简单,您可以调整它 - 关键是您只能设置一个标志并让另一个线程在准备就绪时使用react。这意味着它处于稳定状态,已经完成了一轮它正在做的事情,并且可以在不冒竞争条件的情况下做事。使用交互操作重置标志(一个 int)并保留一些计时数据,以确保您的线程在一段时间 T 内不会再次使用react - 否则它们可以将其生命周期用于查询数据库。

关于c# - 在多线程程序中使用 EF 的好建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3258357/

相关文章:

c# - 使用 LockBits 从内存创建的 GDI+ 通用错误保存位图

c# - RestSharp 和 Twitter API 1.1 : How do I correctly URLEncode status update text?

c# - 在 WinForms 中托管 IE 8 并打开 PDF

C#反编译

.net - 是否有内置的 TypeConverter 或 UITypeEditor 来编辑字符串列表

C# WebApi Odata - EF 不过滤

c# - 快速更新 MSSQL 中的列

c# - 以编程方式连接和断开 USB 设备

c# - 添加对象不起作用

c# - 使用数据库中的“选定”成员对组成员资格进行建模