entity-framework-core - 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);
}
}
那么,丢失的连接字符串在哪里?我在上下文类中设置了一个断点,这样我就可以检查连接字符串,但调试器从未命中它。所以,我完全不知所措。
任何想法表示赞赏。
谢谢
解决方案
您正在通过 DbContext 构造函数传递外部选项。在您的OnConfiguring
覆盖范围内,您正在专门检查是否已配置选项。
您的连接字符串为空的原因是它可能被传递了。
来自DbContextOptionsBuilder.IsConfigured上的 MSDN 文档
获取一个值,该值指示是否已配置任何选项。当您重写 OnConfiguring(DbContextOptionsBuilder) 来配置上下文时,这可能很有用,但在某些情况下,您还可以通过上下文构造函数从外部提供选项。此属性可用于确定选项是否已设置,并跳过 OnConfiguring(DbContextOptionsBuilder) 中的部分或全部逻辑。
通过构造函数选项传递您的连接字符串,或删除 IsConfigured 检查。
推荐阅读
- sql - 如何根据存储过程中的条件将变量替换为另一个变量?
- git - 如何使用 Visual Studio Code 测试和编辑某人的拉取请求并将建议的编辑推送到现有 PR?
- javascript - 如何设计正则表达式编码以将 % 添加到交易结果中。止盈、止损,甚至入场
- r - 使用 checkboxGroupInput 过滤数据以用于 Shiny 中的输出
- postgresql - 将 CSV 导入到 postgreSQL 中的表中,忽略重复项 - 亚马逊 AWS/RDS
- c# - 如何表达 .Any(y => y.Name == "val")); 在表达式树中?
- javascript - jQuery 错误 ((n.event.special[g.origType]||{}).handle||g.handler).apply 不是函数
- excel - 使用 WorksheetFunction.VLookup(动态范围)解决 1004 错误问题
- javascript - 流星冲突模板编译器和静态html
- excel - 当新的数据子集开始时,如何使公式在整个工作表中重置/重新计算?