【问题标题】:EF Core set connection stringEF Core 设置连接字符串
【发布时间】:2020-04-14 08:35:44
【问题描述】:

我有一个由其他 dotnet 项目(Azure 函数应用程序和一个 Web 应用程序)使用的数据库项目。我想使用 dotnet ef core cli 来处理迁移,但我不想将我的连接字符串保留在代码中(我希望我的 repo 是公开的)。

这是我当前的 DbContext:

public ChadwickDbContext(DbContextOptions options): base(options) {}

当我运行类似的东西时: dotnet ef migrations add InitialCreate

我得到错误:

无法创建“ChadwickDbContext”类型的对象。为了 设计时支持的不同模式,请参阅 https://go.microsoft.com/fwlink/?linkid=851728

这之前有效,因为我将连接字符串硬编码如下:

public ChadwickDbContext(string connectionString = "<connection string>"): base(GetOptions(connectionString)) {}

有没有办法通过 cli设置连接字符串,或者在纯数据库项目中包含某种环境文件,例如 appsettings.json

Scaffolding 似乎接近我想要的,但这似乎更像是一种生成您的上下文和模型的方式(这已经完成)。

【问题讨论】:

  • 可以在appsettings.json文件中添加connectionstring
  • 我知道这一点,这就是我想要完成的。我不确定如何在 dotnet core3.1 中引用该文件

标签: c# .net entity-framework entity-framework-core


【解决方案1】:

看起来最好的方法是设置你自己的 json 文件并注册它:

例子:

        public ChadwickDbContext(): base(GetOptions()) {}

        private static DbContextOptions GetOptions()
        {

            var config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
            var connectionString = config["ConnectionStrings:DefaultConnection"];
            var options = new DbContextOptionsBuilder();
            options.UseSqlServer(connectionString);
            return options.Options;
        }

Appsettings.json

{
  "ConnectionStrings": {
    "DefaultConnection": "<Connection String>"
  }
}

【讨论】:

  • 据我所知,你需要startup.cs来初始化服务和数据库连接。但是你知道得更好。
  • 不正确。数据库项目中没有 Startup.cs。您应该阅读 EF Core 如何在其 cli 和迁移的上下文中工作,以便更好地理解这个问题。
猜你喜欢
  • 2019-06-26
  • 2020-01-07
  • 2019-05-13
  • 2019-01-07
  • 2018-05-28
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
相关资源
最近更新 更多