to_vmaccount chiama to_vmrole e viceversa, entrando in un ciclo di chiamate infinito l'applicazione va in stackoverflow.
Questo succede perche stai interpretando male il ruolo del viewmodel. Il VM non è un copia incolla di un entità ma è una classe di supporto per una VIEW. Ne devi avere uno per ogni view non uno per ogni entità sottostante. Il fatto che al 90% una view tratta un entità non significa che tra vm ed entity ci debba essere corrispondenza 1:1. La corrispondenza 1:1 è tra View e VieModel.
Il viemodel quindi va "cucito addosso" alla view e non all'entity.