Это зависит от того, как каждая модель больше похожа на идею / концепцию, чем на то, что вам нужно строго соблюдать. Сказав это, вы заметите, что иногда да, желательно использовать класс для каждой ViewModel или, возможно, использовать универсальный ViewModel, если это применимо.
Я знаю, что это трудно, потому что я был (и все еще нахожусь) в том же положении, что и вы.
В вопросе 2, что я иногда делаю, это извлекаю и IQueryable, а затем "переводю" возвращаемый объект в ViewModel. Репозитории / Домен не должны ничего знать о ViewModels, поскольку это просто презентация.
Отвечая на пункт 3, если вам нужно связать элемент управления с сотрудником и отделами вместе,
Может быть, вы можете сделать что-то вроде этого:
public class EmployeeDepartmentsViewModel : BaseViewModel //Base View Model has INPC stuff
{
public Employee Employee { get; set; }
public Department Department { get; set; }
}
Надеюсь, это прояснит ваши сомнения.