Ошибка понятна - провайдер и соединение никогда не настраиваются. Весь этот код можно заменить следующим контекстом:
public class MyAppContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
public MyAppContext(){}
public MyAppContext(DbContextOptions<MyAppContext> options)
:base(options)
{}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//The base method is empty
modelBuilder.HasDefaultSchema("app");
}
}
И вызов AddDbContext
внутри ConfigureServices
:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyAppContext>(options =>
{
var dbConString = Configuration.GetConnectionString("ITMDbConnection");
options.UseSqlServer(dbConString);
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
....
}
Хотя большинство приложений имеют более одного DbContext. Одним из вариантов будет добавление другого метода к Startup.cs
для их регистрации. Для более сложных приложений, например приложений, состоящих из разных доменов / модулей / подсистем / проектов, лучшей идеей будет создание методов расширения, например:
public static CustomerDomainExtensions
{
public static IServicesCollection AddCustomerDomain(this IServicesCollection services,IConfiguration configuration)
{
return services.AddCustomerContexts(configuration)
.AddRepositories(...)
...;
}
public static AddCustomerContexts(this IServicesCollection services,IConfiguration configuration)
{
var dbConString = Configuration.GetConnectionString("ITMDbConnection");
services.AddDbContext<MyAppContext>(options =>
{
options.UseSqlServer(dbConString);
});
//Add more contexts ...
}
}
В Startup.cs
это будет вызываться внутри ConfigureServices
. Так работают все классы Microsoft.Extensions.*
, предоставляя методы расширения Add
и Use
для использования в Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddCustomerDomain(Configuration);
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
EDIT
Добавлен конструктор по умолчанию в DbContext