实体框架和DBContext问题

时间:2012-06-12 06:53:35

标签: c# .net-4.0 entity-framework-4 database-concurrency

我被警告不要在我的应用程序中使用多个Entity Framework的DBEntityContext。原因是由于并发访问数据库而导致死锁的风险。

任何人都可以证实吗?如果这是真的,为DBContext实现Singleton对象是个好主意吗?

欢迎任何有关此问题的文章。

谢谢你进步。

2 个答案:

答案 0 :(得分:8)

ObjectContext和DbContext不是线程安全的。见http://msdn.microsoft.com/library/system.data.objects.objectcontext.aspx。如果在像ASP.NET这样的多线程环境中使用它们,则在使用单个实例时会遇到大麻烦。建议每个请求使用一个ObjectContext。 ObjectContext必须在请求结束时处理。文章Managing Entity Framework ObjectContext lifespan and scope in n-layered ASP.NET applications可能会有所帮助。

是否有可能,您错过了向您讲述死锁的顾问?可能是他想以错误的方式使用ObjectContext时警告你可能出现的死锁。

答案 1 :(得分:3)

在Web应用程序中,您必须为每个已处理的Web请求使用新的上下文实例,并在您不再需要它之后处置该实例。上下文和与EF相关的任何内容都不是线程安全的。此外,它实现了工作单元和身份映射模式,使other restrictions使用上下文实例。

可能会发生死锁,但这是您必须通过正确的交易设计解决的问题。