DbContext的私有构造函数

时间:2012-10-17 09:12:05

标签: .net asp.net-mvc singleton asp.net-mvc-4 dbcontext

是否有必要控制正在创建的dbContext个对象的数量?

我认为将Singleton模式应用于我的customDbContext类可能更安全。但是,当我在程序包管理器控制台中执行Update-Database命令时,出现错误,我的dbContext没有默认构造函数(由于我实现了Singleton模式)。

问题:它真的更安全吗?还是我应该选择简单的解决方案?

public class WebshopContext : DbContext
{
    private static WebshopContext database;

    private WebshopContext() : base("DefaultConnection") { }

    public static WebshopContext GetInstance() {
        if (database != null)
        {
            return database;
        }
        else {
            database = new WebshopContext();
            return database;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

DbContext对应于一个工作单元。您不应该创建一个单例,因为它将在您的所有请求中共享。您不应为每个数据库请求创建新的DbContext,因为单个工作单元中的不同数据库请求(可能是控制器中的方法)应该共享相同的实体以便兼容。

为控制器中的每个命令创建一个DbContext并传递它,当请求完成时,如果是更新请求,则提交更改。

如果您不想随时传递DbContext,可以为DbContext创建"scope"