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
方法吗?
是否有其他/更好的方法来进行数据库架设?
答案 0 :(得分:1)
更好的做法是针对特定环境使用配置文件。 appsettings.Development.json
,appsettings.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的配置。