Что входит в DbContextOptions при вызове нового DbContext?
Я не использую DI и просто хочу вызвать DbContext из моего контроллера. Я пытаюсь понять, какими должны быть «варианты»?
ApplicationDbContext.cs
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<Gig> Gigs { get; set; }
public DbSet<Genre> Genres { get; set; }
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
}
}
GigsController.cs
public class GigsController : Controller
{
private ApplicationDbContext _context;
public GigsController()
{
_context = new ApplicationDbContext();
}
public IActionResult Create()
{
var viewModel = new GigFormViewModel
{
Genres = _context.Genres.ToList()
};
return View(viewModel);
}
}
Проблема заключается в моем конструкторе GigsController:
_context = new ApplicationDbContext();
Я ошибаюсь, потому что мне нужно передать что-то в ApplicationDbContext. Отсутствует аргумент, который соответствует обязательному формальному параметру 'options' для ApplicationDbContext.ApplicationDbContext (DbContextOptions) '
Я попытался создать конструктор по умолчанию в ApplicationDbContext, полученный из base (), но это тоже не сработало.
В моем файле startup.cs я настроил ApplicationDbContext
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc();
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}