После прочтения этой темы, похоже, хороший подход - создать контекст один раз для каждого запроса.
Чтобы добиться этого, в Startup.cs я объявил два статических объекта
public class Startup
{
public static DbContextOptionsBuilder<MCContext> optionsBuilder = new DbContextOptionsBuilder<MCContext>();
public static MCContext db = null;
затем инициализируйте optionsBuilder при запуске приложения (только один раз):
public Startup(IConfiguration configuration)
{
optionsBuilder.UseSqlServer(configuration["ConnectionStrings:DefaultConnection"]);
}
в то время как дБ при каждом запросе:
app.Use(async (context, next) =>
{
db = db ?? new MCContext(optionsBuilder.Options);
await next.Invoke();
});
Тогда, когда мне нужен контекст в контроллере или на бритвенной странице cs, я могу получить его с помощью Startup.db:
User cur = await Startup.db.User.Where(x => x.Id == uid).FirstOrDefaultAsync();
Я не располагаю контекстом согласно здесь
Поскольку я не знаком с DI, мне интересно, правильный ли этот подход или я что-то упускаю.