实体框架和 DBContext 问题
本文关键字:问题 DBContext 框架 实体 | 更新日期: 2023-09-27 18:37:02
我被警告不要在我的应用程序中使用实体框架的多个DBEntityContext。 原因是由于对数据库的并发访问而导致死锁的风险。
谁能证实这一点?如果这是真的,那么为 DBContext 实现一个 Singleton 对象是个好主意吗?
欢迎任何关于这个问题的文章。
谢谢前进。
ObjectContext 和 DbContext 不是线程安全的。请参阅 http://msdn.microsoft.com/library/system.data.objects.objectcontext.aspx。如果在像 ASP.NET 这样的多线程环境中使用它们,则在使用单个实例时会遇到很大的麻烦。建议每个请求使用一个 ObjectContext。ObjectContext 必须在请求结束时释放。文章管理 n 层 ASP.NET 应用程序中的实体框架对象上下文生命周期和范围可能会有所帮助。
有没有可能,你误解了告诉你死锁的顾问?也许他想警告你,当以错误的方式使用ObjectContext时,可能会出现死锁。
在 Web
应用程序中,您必须为每个处理的 Web 请求使用一个新的上下文实例,并在不再需要该实例后释放该实例。上下文和与 EF 相关的任何内容都不是线程安全的。此外,它实现了工作单元和身份映射模式,这对使用上下文实例进行了其他限制。
死锁可能会发生,但这是您必须通过正确的事务设计来解决的问题。