【问题标题】:DbContext Has No Connection StringDbContext 没有连接字符串
【发布时间】:2021-08-02 05:48:54
【问题描述】:

我正在构建一个 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);
            }
        }

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

感谢任何想法。

谢谢

【问题讨论】:

  • 不清楚你在这个 Linqpad 查询中到底在做什么。有几种方法可以在 Linqpad 中使用 EF 上下文。你是怎么做到的?
  • 这个解决方案可能会帮助你stackoverflow.com/questions/38808604/…
  • Gert,我多年来一直使用 LinqPad 来测试 VS 应用程序中的数据函数。在查询窗口中,只需按 F4,您就可以选择包含项目的 dll。然后,您可以使用 LinqPad 来练习数据功能。我喜欢它,因为它提供了更好或更容易看到的错误消息。
  • Abi 包含的链接给了我足够不同的视角来找到解决方案。如果可以的话,我会把它标记为答案。
  • 不过,这只是使用它的一种方式。而且我们看不到您如何在 Linqpad 查询中实例化和初始化上下文。

标签: entity-framework-core


【解决方案1】:

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

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

来自 DbContextOptionsBuilder.IsConfigured 上的 MSDN 文档

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

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

【讨论】:

  • 该链接提供了有关 IsConfigured 测试的信息,但删除 IsConfigured 测试解决了该特定问题。
猜你喜欢
  • 2021-10-08
  • 2014-02-05
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多