Я настроил несколько моделей для своего приложения и добавил их (с помощью DbSet) в ApplicationDBContext из шаблона идентификации , но теперь я не могу понять, как получить доступ к контекстусам внутри контроллера.
Есть ли глобальный контекст, который я могу использовать через внедрение зависимостей?Нужно ли создавать новый контекст каждый раз, когда я делаю запрос?Если да, могу ли я повторно использовать конфигурацию из Startup.cs?
Добавление параметра ApplicationDBContext в конструктор моего контроллера и последующий вызов его из функции приводит к следующей ошибке:
Необработанное исключение: System.ObjectDisposedException: Невозможно получить доступ к удаленному объекту.Распространенной причиной этой ошибки является удаление контекста, который был разрешен путем внедрения зависимости, а затем попытка использовать тот же экземпляр контекста в другом месте вашего приложения.Это может произойти, если вы вызываете Dispose () для контекста или заключаете контекст в оператор using.Если вы используете внедрение зависимостей, вы должны позволить контейнеру внедрения зависимостей избавиться от экземпляров контекста.
[Route("[controller]/[action]")]
public class MyController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly ILogger _logger;
private readonly UrlEncoder _urlEncoder;
private readonly MyContext _context;
public MyController(
UserManager<ApplicationUser> userManager,
ILogger<ManageController> logger,
UrlEncoder urlEncoder,
MyContext context)
{
_userManager = userManager;
_logger = logger;
_urlEncoder = urlEncoder;
_context = context;
}
[HttpGet]
public async void Index()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
}
[HttpPost]
public async void AMethod(string parameter)
{
await _context.MyEntity.AddAsync(parameter);
await _context.SaveChangesAsync();
}
}