为DBContext使用Singleton模式的更好方法

时间:2017-09-01 19:32:46

标签: c# asp.net-mvc entity-framework singleton

我使用EntityFramework开发了一个ASP.NET MVC应用程序,我想知道在项目中为DbContext实现Singleton Pattern的最佳实践是什么?

这是我的代码:

private static Lazy<DbContext> _instance = new Lazy<DbContext>(()
    => new DbContext());

public static DbContext Instance
{
    get
    {
        if (
            _instance.Value.Database.Connection.State == 
            System.Data.ConnectionState.Closed
           )
            _instance.Value.Database.Connection.Open();

        return _instance.Value;
    }
}

由于每次连接到数据库后关闭的连接状态,在返回DbContext实例之前,我已经检查了连接状态,如果没有打开则打开它。

实际上,我不确定DbContext的实现模式,我想知道在使用DbContext时是否有更好的方法来实现Singleton?我们应该使用Singleton for DbContext吗?

1 个答案:

答案 0 :(得分:1)

如果您正在开发CRUD类型的应用程序,那么请按照此处所述调查通用存储库模式:http://www.tugberkugurlu.com/archive/generic-repository-pattern-entity-framework-asp-net-mvc-and-unit-testing-triangle

请注意,上下文是私有实例变量。