【发布时间】:2021-09-20 16:29:14
【问题描述】:
我有一个引用 EF Core 项目的 ASP.NET Core Web API 项目。
当我搭建 EF Core 项目时,它会自动在 OnConfiguring 方法中设置连接字符串:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("Server=etc;Database=etc;uid;pwd;");
}
}
然后我发现,相当于把连接字符串放到web.config中,就是放到Web API项目的appSettings.json文件中,在Startup的ConfigureServices方法中读取Web API 项目的类等...
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddSwaggerGen(c => ...);
var CNN_STR = Configuration.GetConnectionString("DBNameInAppSettingsJson");
services.AddDbContext<MyDBContext>(options =>
options.UseSqlServer(CNN_STR));
}
但是现在连接字符串在两个地方!我应该从 EF Core 项目的 OnConfiguring() 方法中删除它吗?如果有,怎么做?
【问题讨论】:
-
第二个连接字符串仅在 (!optionsBuilder.IsConfigured) 时使用。但它已经在启动时配置了
-
有同样的问题。创建迁移需要一个,另一个用于正常运行的应用程序。我想出的唯一方法是在 OnConfiguring() 或 IDesignTimeDbContextFactory 中使用 Microsoft.Extensions.Configuration.ConfigurationBuilder 创建 IConfigurationRoot 的实例。这不会删除设置连接字符串的代码,但至少两个地方都从配置中获取相同的连接字符串。
-
@Serge,是的,它已经在 Startup 中配置,但是当代码运行检查时。IsConfigured,它仍然显示为 false,这让我感到惊讶! (这适用于 .NET 5.0)
-
@joedotnot 我刚刚检查了我的 net5 应用程序,isconfigured 是真的。所以也许你需要重新检查你是否正确配置了它。对于迁移,它也使用启动配置。或者只是尝试评论 dbcontext 代码并查看它是否正常工作。
-
有一个选项可以不包含 onconfiguring 代码。
标签: c# entity-framework-core asp.net-core-webapi connection-string