В EF Core обычно передаются некоторые DbContextOptions в конструктор.
В общем, конструктор выглядит так:
public BlexzWebDb(DbContextOptions<BlexzWebDb> options) : base(options)
Как вы можете видеть, здесь нетдопустимая перегрузка в виде конструктора без параметров:
Таким образом, это не работает:
using (var db = new BlexzWebDb())
Вместо
. В Net Core реализована IoCв его корнях.Хорошо, это значит;вы не создаете контекст, вы просите инфраструктуру предоставить вам его, основываясь на некоторых правилах, которые вы определили ранее.
Пример: где-то вы зарегистрируете свой dbcontext, (Startup.cs):
//typical configuration part of .net core
public void ConfigureServices(IServiceCollection services)
{
//some mvc
services.AddMvc();
//hey, options!
services.AddDbContextPool<BlexzWebDb>(options =>
options.UseSqlServer(Configuration.GetConnectionString("BlexzWebConnection")));
//...etc
Теперь регистрация завершена, вы можете получить свой контекст из фреймворка.Например: инверсия управления через конструктор в вашем контроллере:
public class SomeController : Controller
{
private readonly BlexzWebDb _db;
//the framework handles this
public SomeController(BlexzWebDb db)
{
_db = db;
}
//etc.
update
В наши дни предпочтительный метод добавления DbContext в коллекцию сервисовэто использовать AddDbContextPool
метод:
//hey, options!
//hey, DbContextPool
services.AddDbContextPool<BlexzWebDb>(options =>
options.UseSqlServer(Configuration.GetConnectionString("BlexzWebConnection")));
//etc
для получения дополнительной информации см. msdn