ASP.NetCore 2.x支架式数据库和appsettings.json

时间:2019-09-04 20:34:55

标签: asp.net-core

ASP.NetCore 2.x,VisualStudio 2019

嗨,

我尝试阅读有关配置的.NetCore文档,但缺少某些内容。我有一个消耗三个数据库的项目。文档告诉我,我现在必须通过运行类似的命令来“自行搭建”数据库连接:

    Scaffold-DbContext -Connection "Server=my-db.company.edu;Initial Catalog=MyDB;Integrated Security=True" -Context MyThingsContext -Schemas "dbo" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models\MyThings

这有效。我得到了数据库上下文和关联的模型文件。我还得到了包含以下内容的MyThingsContext.cs文件:

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
        if (!optionsBuilder.IsConfigured) {
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.
            optionsBuilder.UseSqlServer("Server=my-db.company.edu;Initial Catalog=MyDB;Integrated Security=True");
        }
    }

注意:上面的#warning...行。我实际上是做过三次数据库脚手架,一次是针对三个不同的DB。 ...Context.cs个文件中有两个具有#warning...行,但其中一个具有相同的注释,但格式为//warning...

在构建阶段,我在上面的代码注释中得到了两个#warning...,但是没有//warning

#//警告版本是否正常?这是生成的代码,所以我不应该弄乱它。

接下来,由于警告我将连接字符串移出代码,我可以在将连接字符串放入OnConfiguring之后仅删除appsettings.json方法吗?

是否有其他/更好的方法来进行数据库架设?

2 个答案:

答案 0 :(得分:1)

更好的做法是针对特定环境使用配置文件。 appsettings.Development.jsonappsettings.Production.json

例如:

appsettings.Development.json

{
  "ConnectionStrings": {
    "MyThingsDatabase": "Server=development-db.company.edu;Initial Catalog=DevelopmentDB;Integrated Security=True"
  },
}

appsettings.Production.json

{
  "ConnectionStrings": {
    "MyThingsDatabase": "Server=production-db.company.edu;Initial Catalog=ProductionDB;Integrated Security=True"
  },
}

然后在Startup.cs ConfgureServices方法中:

services.AddDbContext<MyThingsContext>(options => 
    options.UseSqlServer(Configuration.GetConnectionString("MyThingsDatabase"));

您可以通过多种方式指定要在哪个环境中工作。 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-2.2

答案 1 :(得分:1)

是的,直接在OnConfiguring方法中使用ConnectionString不仅是设计的灵活性,而且如果使用用户名/密码组合,则可能会导致安全漏洞。 您应该将appsettings.json用于任何连接字符串,并将适当的一个传递给该dbContext的配置。