Правильно ли я пишу на asp.net Core?
1) Репозиторий - коллекция, и методы работы с ней как с коллекцией, ничего лишнего.
2) Controller - посредник между View и Model (стиль MVC). В нем не должно быть никакой бизнес логики, а значит и открытия коннекта и выполнения запроса с его текстом. Тут должен быть вызов компетентного исполнителя - сервиса.

Рекоменую посмотреть на - CleanArchitecture https://github.com/jasontaylordev/CleanArchitecture

Посмотрите на готовые сайты:
https://github.com/nopSolutions/nopCommerce
https://github.com/simplcommerce/SimplCommerce
И крутого монстра - https://github.com/dotnet-architecture/eShopOnCont...

Все сразу не запомнится и не зайдет, это долгий путь.

Самый лучший курс от 0 до норм понимания - https://codewithmosh.com/p/become-a-full-stack-net...
Состоит из трех частей, где автор создает готовое приложение вроде мини соц сети с музыкой, вроде.
Можно в целом его посмотреть, и делать как он, не промахнешся.
В том и суть репозиториев что все через них проходит, иначе это потенциальная уязвимость для sql иньекции.
И при изменении репозиторя измениться везде где он используеться
Например если будешь кешировать в редисе то все будут  кешироваться
Так что так некоректно.
И еще выносить логику из контроллеров стоит в сервисы https://habr.com/ru/post/437002/