Использование ApplicationDBContext в контроллере для ASP.Net Core MVC - PullRequest
0 голосов
/ 26 мая 2018

Я настроил несколько моделей для своего приложения и добавил их (с помощью 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();
    }
}

1 Ответ

0 голосов
/ 26 мая 2018

Согласно этой статье , это потому, что моя функция async void.Я изменил его на async Task и теперь он работает ._.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...