.NET Core 控制台应用程序中未配置的 DbContext

问题描述 投票:0回答:0

我使用 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 应用程序。控制台应用程序有什么不同吗?

entity-framework-core .net-6.0 dbcontext
© www.soinside.com 2019 - 2024. All rights reserved.