从 appsettings.json 获取 ConnectionString,而不是在 .NET Core 2.0 应用程序中硬编码

2023-12-01

我在 NET Core2.0 应用程序中有以下课程。

// required when local database does not exist or was deleted
public class ToDoContextFactory : IDesignTimeDbContextFactory<AppContext>
{
    public AppContext CreateDbContext(string[] args)
    {
        var builder = new DbContextOptionsBuilder<AppContext>();
        builder.UseSqlServer("Server=localhost;Database=DbName;Trusted_Connection=True;MultipleActiveResultSets=true");
        return new AppContext(builder.Options);
    }
}

当数据库不存在且必须在运行时创建时,Core 2.0 中需要进行迁移更新数据库.
升级到 ASP.NET Core 2.0 后无法创建迁移

我不希望在 2 个地方(此处和 appsettings.json 中)有 ConnectionString,而只在 .json 中 所以我尝试更换

"Server=localhost;Database=DbName;Trusted_Connection=True;MultipleActiveResultSets=true"

with

ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString

但它不起作用,我得到了空值。

更新1:
请注意,在 Core 2 中不需要显式添加 .json,因此问题不在于该文件。
https://andrewlock.net/exploring-program-and-startup-in-asp-net-core-2-preview1-2/

更新2:
另外,我已经使用配置将 ConnectionString 从 .json 发送到 Context:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<AppContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    }
}

但我不能用这个ToDoContextFactory因为它没有配置,并且ToDoContextFactory由迁移使用,因此应用程序根本不运行。

解决方案: 根据@JRB 的回答,我让它像这样工作:

public AppContext CreateDbContext(string[] args)
{
    string projectPath = AppDomain.CurrentDomain.BaseDirectory.Split(new String[] { @"bin\" }, StringSplitOptions.None)[0];
    IConfigurationRoot configuration = new ConfigurationBuilder()
        .SetBasePath(projectPath)
        .AddJsonFile("appsettings.json")
        .Build();
    string connectionString = configuration.GetConnectionString("DefaultConnection");

    var builder = new DbContextOptionsBuilder<AppContext>();
    builder.UseSqlServer(connectionString);

    return new AppContext(builder.Options);
}

步骤 1:在 OnConfiguring() 中包含以下内容

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
            .AddJsonFile("appsettings.json")
            .Build();
        optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
    }

第 2 步:创建 appsettings.json:

  {
    "ConnectionStrings": {       
      "DefaultConnection": "Server=YOURSERVERNAME; Database=YOURDATABASENAME; Trusted_Connection=True; MultipleActiveResultSets=true"        
    } 
  }

第 3 步:将 appsettings.json 硬拷贝到正确的目录

  Hard copy appsettings.json.config to the directory specified in the AppDomain.CurrentDomain.BaseDirectory directory. 
  Use your debugger to find out which directory that is.        

假设:您已经在项目中包含了 Microsoft.Extensions.Configuration.Json 包(从 Nuget 获取)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 appsettings.json 获取 ConnectionString,而不是在 .NET Core 2.0 应用程序中硬编码 的相关文章

随机推荐

  • 将纪元转换为日期时间 SQL Server

    抱歉 我的帽子在标题中折断了 我遇到以下问题 dateadd S unixtime 1970 01 01 将纪元转换为datetime在 SQL Server 中 但收到以下错误 将表达式转换为数据类型 int 时出现算术溢出错误 显然这意
  • 如何在 addEventListener 方法之外访问变量值?

    我正在尝试访问 addeventlistner 外部的 var accInfo 值 以便我可以使用该对象进行进一步编码 我是 javascript 的初学者 不知道 jquery 和其他框架 所以请指导我 谢谢 let form1 docu
  • 在哪里可以找到一些提供 VB.NET 教程的网站?

    我正在寻找一个类似于 W3Schools 的网站 该网站教授 VB NET 2008 的基础知识 如果不存在 我只想要一些好的教程来帮助我入门 几年前我做了一些基本的 VB NET 但我需要更新自己 有什么想法吗 这有一些非常好的截屏视频
  • 重写 .htaccess 中的查询字符串

    我正在尝试对查询字符串进行非常简单的重写 但我一点运气都没有 我需要从 http example dot com ACT jquery to http example dot com index php ACT jquery 这是我在 ht
  • Meteor 自定义包中的 CoffeeScript 命名空间导出

    在几个小时内 我无法让 Meteor 包导出 CoffeeScript 文件中定义的变量 In foo coffee 例如 我尝试使用 Foo foo 1 Foo foo 1 exports Foo foo 1 等等 但是nothing会工
  • Typescript:来自枚举的字符串文字联合类型

    我想从枚举中获取字符串文字联合 对于这个枚举 enum Weekday MONDAY mon TUESDAY tue WEDNESDAY wed 我想得到这个 type WeekdayType mon tue wed I tried typ
  • Python 程序输出不正确的循环素数

    问题陈述 数字 197 被称为循环素数 因为数字的所有旋转 197 971 和 719 本身都是素数 100 以下的素数有 13 个 2 3 5 7 11 13 17 31 37 71 73 79 和 97 一百万以下的圆形素数有多少个 我
  • 如何检查存储库是否是裸露的?

    我收到警告 warning You did not specify any refspecs to push and the current remote warning has not configured any push refspe
  • 在一个 OSGi 实例中部署多个捆绑版本

    我在 CQ 中部署了三个应用程序 它们都依赖于一个捆绑包 例如 核心 核心正在经历重大改造 需要定义所有三个应用程序对不同版本核心的依赖关系 例如 A 将依赖于 core 1 0 B 将依赖于 core 1 5 C 将依赖 core 2 0
  • 按字母顺序对数组结果进行分组 PHP

    我使用下面的代码来显示数据库中网站的图像和名称 fieldset h1 A h1 ul li class siteli a href class add div img src width 16 height div p p a li ul
  • Backbone.js中不同视图的调用方法

    我将backbone js 与 ASP NET MVC 4 结合使用 我想从视图之一调用不同视图的方法 为了使这一点更容易理解 我在下面创建了一个小示例 在 MyView2 的 OperationCompleted 方法中 我想调用以下 调
  • 获取提交按钮id

    在 asp net 表单中 我有几个动态生成的按钮 所有这些按钮都提交一个表单 有没有办法获取哪个按钮在页面加载事件中提交表单 The sender处理程序的参数包含对引发事件的控件的引用 private void MyClickEvent
  • ggplot 用于多个分类变量——计数数据

    一如既往 这个论坛是我找到问题解决方案的最后希望 我正在研究一个数据集 其中一些参与者 儿童 接受了干预计划以提高他们的社交技能 态度 在治疗之前 所有参与者都观看了一段视频片段 其中发生了 足球比赛 篮球比赛 和 斯诺克比赛 演员们要么
  • Javascript 相当于 php 的 strtotime()?

    在 PHP 中 您可以轻松地将英文文本日期时间描述转换为正确的日期 strtotime Javascript中有类似的东西吗 那没有 最接近的内置选项是Date parse 它解析非常有限的子集什么的strtotime can var ts
  • 生成具有固定概率的随机数

    我在论坛上对此经常感到愤怒 但所有答案都针对所提出的问题 我发现最接近我需要的是 概率随机数生成器 作者 Alon Gubkin 不同的是 Alon要求给一张脸 也就是六张 额外的机会 就我而言 我想划分 6 个面孔的机会 使它们加起来为
  • R中的lm函数没有给出分类数据中所有因子水平的系数[重复]

    这个问题在这里已经有答案了 我正在尝试使用分类属性使用 R 进行线性回归 并观察到我没有获得每个不同因子水平的系数值 请参阅下面的代码 我的状态有 5 个因子级别 但只看到 4 个系数值 gt states c WA TE GE LA SF
  • 从 MySQL 读取更快还是从文件读取更快?

    HI 我有一个疑问 我发现在大表的情况下读取 mysql 数据会更慢 我已经做了很多优化 但无法完成 我在想的是 如果我将数据存储在一个文件中 速度会更快吗 当然 每个数据将是一个单独的文件 所以数百万个数据 数百万个文件 我同意它会消耗磁
  • ‘setObjectForKey: key不能为nil’异常,如何判断是哪一个

    我的应用程序随机 有时会 有时不会 崩溃 Terminating app due to uncaught exception NSInvalidArgumentException reason setObjectForKey key can
  • Linq 查询返回具有特定属性值的嵌套数组

    我一直在搜寻多种资源 但无法弄清楚这一点 我正在尝试根据嵌套了几层深度的属性来过滤对象数组 我已经简化了事情 所以假设我有以下课程 class A B bb class B C cc class C string value 现在是代码 A
  • 从 appsettings.json 获取 ConnectionString,而不是在 .NET Core 2.0 应用程序中硬编码

    我在 NET Core2 0 应用程序中有以下课程 required when local database does not exist or was deleted public class ToDoContextFactory IDe