DbContext.OnConfiguration在Asp.net核心中没有被调用并且表现得很奇怪

时间:2016-08-20 21:10:46

标签: asp.net-mvc asp.net-core entity-framework-core

在我的asp.net核心项目中,我有一个ReadingContext类来自DbContext。根据文档OnConfiguring应该为创建的DbContext的每个实例调用。

但在我的情况下,只有在调试时检查实例时才调用它。我在OnConfiguring内有一个断点,但即使调用该方法也没有。

OnConfiguring方法。 OnConfiguring method

已创建实例,但尚未调用OnConfiguring Instance created

OnConfiguring呼吁查看对象,但它的断点没有被击中。 OnConfiguring called

3 个答案:

答案 0 :(得分:2)

  

根据文档,应该为创建的每个DbContext实例调用OnConfiguring。

我不知道您所引用的文档,但我确定在创建上下文时<{1}}运行并不能说明 。因为它没有。它在第一次实际上使用的情况下运行。这就是您在调试视图中开始检查上下文时立即看到方法调用的原因。当您在调试器中暂停断点时,调试器将永远不会跳转到另一个断点,即使代码被命中。

应该大量创建和处理上下文。因此,创建上下文必须尽可能轻量级。它的内部组件尽可能通过延迟初始化创建。

答案 1 :(得分:1)

以防其他人遇到此问题,我不得不使用空构造函数来调用OnConfiguring:

public ReadingContext() : base()
{

}
protected override void OnConfiguring(DbContextOptionsBuilder  
optionsBuilder)
{
  var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json", 
    optional: true, reloadOnChange: true);
  config = builder.Build();  
  optionsBuilder.UseSqlServer(config.GetConnectionString
    ("ReadingContextConnection"));
}

答案 2 :(得分:0)

虽然这篇文章很旧,并且似乎与EF Core v1.0.0一起使用。即使添加了空构造函数,我也面临着EF Core v3.1.100的相同问题。除了OnConfiguring()我可以进入DbContext()和其他方法!

    public SchoolContext() : base()
    { 
    }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"Data Source=(local)\MYSQL;Initial Catalog=School; Integrated Security=True;");
    }