#c# #.net #entity-framework #architecture
#c# #.net #структура организации #архитектура
Вопрос:
Итак, не могли бы вы объяснить мне, будет ли правильным подходом иметь разный DbContext для разных типов пользователей.
Например: У нас есть ApiController с 2 методами:
[HttpGet, Route("admin"), Authorize(RoleType.Admin)] public Tasklt;...gt; Get(... adminRequest) { var query = mapperlt;AdminGetCommandgt;(adminRequest); return mediatr.Send(query); } [HttpGet, Route(""), Authorize(RoleType.User)] public Tasklt;...gt; Get(... userRequest) { var query = mapperlt;UserGetCommandgt;(userRequest); return mediatr.Send(query); }
после этого каждая команда зависит от разных служб/DbContext и имеет разную конфигурацию. Например:
//filter for users ... protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); builder.ApplyGlobalFilterslt;IDeletedUtcDateTimegt;(e =gt; !e.DeletedUtcDateTime.HasValue); } ... //filter for admin ... protected override void OnModelCreating(ModelBuilder builder) { ... base.OnModelCreating(builder); ... } ...
Я чувствую, что мне чего-то не хватает, или здесь существует лучшее решение
Комментарии:
1. Не могли бы вы поделиться кодом, в котором проблема действительно существует? Потому что прямо сейчас я вижу 2 разных метода, отправляющих 2 разные команды, где у вас 2 разных контекста. Почти уверен, что вы можете просто создать или ввести в них разные контексты.
2. @JochemVanHespen Пожалуйста, прочитайте более внимательно, все в посте. Нет проблем, просто на вопрос, на который уже ответил Дэвид Браун
Ответ №1:
Можете ли вы объяснить мне, будет ли правильным подходом иметь разный DbContext для разных типов пользователей.
Это разумный подход, если вам нужен другой набор глобальных фильтров запросов (или другие изменения в отображении или поведении) для пользователей. Вы можете просто получить UserDbContext из AdminDbContext или получить оба из базового DbContext и зарегистрировать их отдельно в DI.