我使用 EF Core 开发了一个 .NET 6 控制台应用程序和 3 个分层项目(Presentation、BLL、DAL)。
我想将我的
appsettings.json
中提供的通用连接字符串用于DbContext
。
这是我在表示层的
Program.cs
中声明的内容:
static void Main()
{
var configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
_configuration = configurationBuilder.Build();
var services = new ServiceCollection();
services.AddDbContext<MyContext>(options => options.UseSqlServer(_configuration.GetConnectionString("MyConnectionString")));
// ....
}
_configuration.GetConnectionString("MyConnectionString")
返回正确的连接字符串。
但是当我使用我的
MyContext
时,它一直返回以下消息:
没有为此 DbContext 配置数据库提供程序
我找到的唯一解决方案是通过做
在DAL项目中覆盖我的
MyContext
public partial class MyContext : DbContext
{
public MyContext()
{ }
public MyContext(DbContextOptions<MyContext> options)
: base(options)
{
}
public virtual DbSet<....> .... { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new Configurations....Configuration());
OnModelCreatingPartial(modelBuilder);
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Data Source=DB;Initial Catalog=Base;Trusted_Connection=True;");
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}
但是,这不是我想要的,因为我必须在解决方案中再次重复连接字符串。我希望连接字符串来自
appsettings.json
(因为它可能取决于环境(dev,prod)))。有办法吗?
另外,为什么
AddDbContext
中的Program.cs
不起作用?它适用于我所有的 ASP.NET Core 6 Web 应用程序。控制台应用程序有什么不同吗?