首页 > 解决方案 > DbContext 没有连接字符串

问题描述

我正在构建一个 MVC 应用程序,使用 LinqPad6 进行测试。当应用程序尝试配置控制器时,我收到 DbContext 没有连接字符串的错误。这是一张图片:

在此处输入图像描述

这是我的 TimeCardsContext 代码的一部分:

公共部分类 TimeCardsContext : DbContext { 公共只读字符串 _connectionString; 公共虚拟 DbSet TimeCards { 获取;放; } 公共虚拟 DbSet Workers { 获取;放; }

    public TimeCardsContext(DbContextOptions<TimeCardsContext> options) : base(options)
    {
        IConfiguration config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
        _connectionString = config.GetConnectionString("TimeConnect");
    }
protected override void OnConfiguring(DbContextOptionsBuilder options)
        {
            if(!options.IsConfigured)
            {
                options.UseSqlServer(_connectionString);
            }
        }

那么,丢失的连接字符串在哪里?我在上下文类中设置了一个断点,这样我就可以检查连接字符串,但调试器从未命中它。所以,我完全不知所措。

任何想法表示赞赏。

谢谢

标签: entity-framework-core

解决方案


您正在通过 DbContext 构造函数传递外部选项。在您的OnConfiguring覆盖范围内,您正在专门检查是否已配置选项。

您的连接字符串为空的原因是它可能被传递了。

来自DbContextOptionsBuilder.IsConfigured上的 MSDN 文档

获取一个值,该值指示是否已配置任何选项。当您重写 OnConfiguring(DbContextOptionsBuilder) 来配置上下文时,这可能很有用,但在某些情况下,您还可以通过上下文构造函数从外部提供选项。此属性可用于确定选项是否已设置,并跳过 OnConfiguring(DbContextOptionsBuilder) 中的部分或全部逻辑。

通过构造函数选项传递您的连接字符串,或删除 IsConfigured 检查。


推荐阅读