在.NET Core Console应用程序中,我有以下DbContext:
public class AppDataContext : DbContext
{
public DbSet<ExampleObject> ExampleObjects { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql(/* Read Connection String from appsettings.json */);
}
}
当然,我可以实例化ConfigurationBuilder类并访问connectionString,如下所示:
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
var connString = Configuration.GetConnectionString("data"));
但是如何强制Entity Framework使用通过依赖注入定义的IConfigurationRoot实例?
谢谢
答案 0 :(得分:0)
您从错误的角度接近它。您当前正在尝试“引入”配置。您需要做的是在ServiceCollection级别“应用”配置,以便Net Core Dependency Injection可以自动使用正确的值实例化DbContext。这是如何执行此操作的示例:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<BloggingContext>(options => options.UseSqlite("Data Source=blog.db"));
}
当然,您仍然可以使用IConfigurationBuilder来获取您的连接字符串-将在上面的ConfigureServices部分中使用,并且“ Data Source = blog.db”将被交换为您的值
您的DbContext可以这样简化:
public class AppDataContext : DbContext
{
public DbSet<ExampleObject> ExampleObjects { get; set; }
}