/// <summary>
        /// Agrega un rol estudiante en la DB. Si el usuario no existe, tambien lo crea.
        /// </summary>
        /// <param name="dni">DNI del estudiante</param>
        /// <param name="nombre">Nombre del estudiante</param>
        /// <param name="email">Email del estudiante</param>
        /// <param name="director_id">ID del director asociado que crea al estudiante.</param>

        public void Nuevo(int dni, string nombre, string email, int director_id)
        {
            if (String.IsNullOrEmpty(nombre) || String.IsNullOrEmpty(email))
            {
                throw new Exception("Debe completar todos los campos");
            }

            TipoRol oTipo    = _tipos.BuscarPorNombre("Estudiante");
            Usuario director = _usuarios.BuscarPorId(director_id),
                    oUser    = _usuarios.BuscarPorDni(dni);

            director.ListaRoles = roles.TraerActivos(director_id);

            Establecimiento oEstablecimiento = director.ListaRoles.First(p => p.Tipo.Nombre == "Director").Establecimiento;
            NivelEducativo  oNivel           = director.ListaRoles.First(p => p.Tipo.Nombre == "Director").Nivel;

            if (oUser == null)
            {
                if (_usuarios.BuscarPorEmail(email) != null)
                {
                    throw new Exception("Ya existe un estudiante con ese email");
                }

                oUser    = new Usuario(nombre, dni, email);
                oUser.Id = _usuarios.Nuevo(oUser);
            }

            if (roles.EsEstudiante(oUser.Id, _establecimientos_niveles.BuscarPorParametros(oEstablecimiento.Id, oNivel.Id)))
            {
                throw new Exception("Este usuario ya tiene el rol estudiante en su institucion.");
            }

            Rol oRol = new Rol(oTipo, oUser, oEstablecimiento, oNivel);

            roles.Nuevo(oRol);
        }