使用单例类创建数据库上下文是一种好习惯吗?

时间:2014-02-24 07:43:17

标签: sql-server asp.net-mvc entity-framework c#-4.0

我想为数据库上下文创建创建一个Singleton对象。我很好奇在mvc应用程序中使用单例上下文是否很好。

有人可以描述单例上下文对象的优缺点吗?

3 个答案:

答案 0 :(得分:1)

DbContext不是线程安全的,因为它在多线程使用环境(如ASP.NET MVC)中用作单例对象是一个巨大的骗局。多个并发数据库操作将导致抛出异常,您需要同步对单例对象的访问以避免这种情况。您还需要担心其生命周期中过时的缓存数据,并妥善管理刷新所述数据。

答案 1 :(得分:1)

作为澄清点,请考虑您的单身人士是否需要按会话请求或应用域。如果将范围限制为单个会话请求,则可以为创建变量创建单个访问点(工厂),并通过该会话保持该值的活动状态,但请确保在请求完成时将其处置。

但是,不要为整个应用程序域(静态变量)甚至用户会话保持单个上下文值。上下文会记住它所获取的每个对象(以支持跟踪更新的字段/值)。最终,您最终会在内存中复制数据库,但只能使用该服务器实例中的值。如果您有一个服务器场,那么服务器之间的陈旧数据会随着时间的推移而加剧。

答案 2 :(得分:0)

使用singleton DbContext非常糟糕。所有更改都将在每个SaveChanges中进行检查。当你的DbContext已经存在足够长的时间时,它会非常缓慢。