Да - это нормальное поведение. Дочерние действия проходят весь конвейер обработки ASP.NET MVC, как и обычные действия.
Если вы хотите избежать этого, используйте Частичное представление . Конечно, таким образом вы потеряете способность выполнять логику в действиях вашего ребенка.
Если вы говорите, что «вызываете несколько дочерних действий» и «каждое действие выполняет один и тот же вызов для получения пользовательских данных», я думаю, вам нужно провести некоторый рефакторинг. Возможно, вы могли бы поместить этот вызов «пользовательских данных» в дочернее действие и применить кеширование вывода. Если вы говорите о «текущих пользовательских данных», то вы также можете вставить их в квитанцию проверки подлинности форм и вообще пропустить вызов БД. Трудно дать больше советов, не зная больше о ситуации.
Другое замечание, которое я хотел бы сделать, это почему вы делаете вызовы базы данных в конструкторе ? Это очень плохая практика. Используйте конструктор для создания экземпляров членов и установки зависимостей, а не извлечения данных.