public async Task<Mensaje> editInstitution([FromBody]UtilsJson.AInstitucion institution)
        {
            Mensaje mensaje = new Mensaje();

            try
            {
                if (institution != null)
                {
                    if (!string.IsNullOrWhiteSpace(institution.token_string))
                    {
                        if (AutenticacionToken.validateToken(institution.token_string) == 1 && AutenticacionToken.validateUserToken(institution.token_string, institution.logueo.correo_electronico))
                        {
                            string n_correo_electronico_l = string.Empty;
                            string n_password1 = string.Empty;
                            string n_password2 = string.Empty;
                            string contrasena = string.Empty;
                            if (institution.logueo != null)
                            {
                                n_correo_electronico_l = institution.logueo.correo_electronico;
                                n_password1 = institution.logueo.contrasena1;
                                n_password2 = institution.logueo.contrasena2;
                                if (!string.IsNullOrWhiteSpace(n_password1) && !string.IsNullOrWhiteSpace(n_password2))
                                {
                                    contrasena = CifradoDatos.cifrarPassword(n_password1);
                                }
                            }

                            //datos representante
                            string nombre_r = institution.representante.nombre;
                            string apellido_r = institution.representante.nombre;
                            string tipo_identificacion = institution.representante.tipo_identificacion;
                            string identificacion = institution.representante.identificacion;
                            string urlCvlac = institution.representante.urlCvlac;
                            string correo_electronico_r = institution.representante.correo_electronico;

                            //datos institucion
                            string nombre = institution.nombre;
                            string descripcion = institution.descripcion;
                            string correo_electronico = institution.correo_electronico;
                            string direccion_postal = institution.direccion_postal;
                            string facebook = institution.facebook;
                            string fax = institution.fax;
                            string impacto = institution.impacto;
                            string linkedin = institution.linkedin;
                            string naturaleza = institution.naturaleza;
                            string pagina_web = institution.pagina_web;
                            int tamano = institution.tamano;
                            string telefono = institution.telefono;
                            string tipo_institucion = institution.tipo_institucion;
                            string twitter = institution.twitter;
                            string constitucion = institution.constitucion;
                            string fecha_creacion = institution.fecha_creacion;
                            string imagen_base64 = institution.imagen_base64;
                            long municipio_id = institution.municipio.id;

                            UtilsJson.ASector[] sectores = institution.sectores;
                            List<Sector> lstSectores = convertToSector(sectores);

                            UtilsJson.ATipoBiotecnologia[] tipo_biote = institution.Tipos_Biotecnologia;
                            List<TipoBiotecnologia> lstTipoBiotecnologia = convertToTipoBiotecnologia(tipo_biote);
                            //Busco la institucion y el representante asociada al usuario y a la contrasena
                            Expression<Func<Persona, bool>> query = (u => u.institucion.logueo.correo_electronico == institution.logueo.correo_electronico && u.institucion.estado == true);
                            List<Persona> institucion = _repositorio.Filter<Persona>(query);

                            //Si el correo_electronico y la contrasena son validas subo a session la institucion
                            if (institucion != null)
                            {
                                if (institucion.Count > 0)
                                {
                                    Municipio municipioDb = _repositorio.Get<Municipio>(municipio_id);

                                    if (!string.IsNullOrWhiteSpace(contrasena))
                                    {
                                        institucion[0].institucion.logueo.contrasena = contrasena;
                                        institucion[0].institucion.logueo.fecha_ult_modificacion = DateTime.Now;
                                    }


                                    institucion[0].institucion.descripcion = descripcion;
                                    institucion[0].institucion.impacto = impacto;
                                    institucion[0].institucion.correo_electronico = correo_electronico;
                                    institucion[0].institucion.linkedin = linkedin;
                                    institucion[0].institucion.municipio = municipioDb;
                                    institucion[0].institucion.naturaleza = naturaleza;
                                    institucion[0].institucion.constitucion = constitucion;
                                    institucion[0].institucion.nombre = nombre;
                                    institucion[0].institucion.pagina_web = pagina_web;
                                    institucion[0].institucion.tamano = tamano;
                                    institucion[0].institucion.telefono = telefono;
                                    institucion[0].institucion.fax = fax;
                                    institucion[0].institucion.direccion_postal = direccion_postal;
                                    institucion[0].institucion.facebook = facebook;
                                    institucion[0].institucion.tipo_institucion = tipo_institucion;
                                    institucion[0].institucion.twitter = twitter;
                                    institucion[0].institucion.fecha_creacion = (!string.IsNullOrWhiteSpace(fecha_creacion)) ? Convert.ToDateTime(fecha_creacion) : (DateTime?)null;
                                    institucion[0].institucion.fecha_ult_modificacion = DateTime.Now;

                                    if (institucion[0].institucion.banner == null)
                                    {
                                        if (!string.IsNullOrWhiteSpace(imagen_base64))
                                        {
                                            institucion[0].institucion.banner = new Imagen { imagenBase64 = imagen_base64, fecha_ult_modificacion = DateTime.Now };

                                            //Redimension de la imagen y creacion de icono
                                            string extension = imagen_base64.Split(',')[0];
                                            imagen_base64 = imagen_base64.Split(',')[1];

                                            byte[] bytes = Convert.FromBase64String(imagen_base64);

                                            if (bytes.Length > 0)
                                            {
                                                byte[] filebytesIcon = UtilsHost.Redimensionar(Image.FromStream(new MemoryStream(bytes)), 100, 100, 32);

                                                string encodedDataIcon = extension + "," + Convert.ToBase64String(filebytesIcon, Base64FormattingOptions.None);
                                                institucion[0].institucion.icono = new Imagen { imagenBase64 = encodedDataIcon, fecha_ult_modificacion = DateTime.Now };
                                            }
                                        }
                                    }
                                    else
                                    {
                                        if (!string.IsNullOrWhiteSpace(imagen_base64))
                                        {
                                            institucion[0].institucion.banner.imagenBase64 = imagen_base64;
                                            institucion[0].institucion.banner.fecha_ult_modificacion = DateTime.Now;

                                            //Redimension de la imagen y creacion de icono
                                            string extension = imagen_base64.Split(',')[0];
                                            imagen_base64 = imagen_base64.Split(',')[1];

                                            byte[] bytes = Convert.FromBase64String(imagen_base64);

                                            if (bytes.Length > 0)
                                            {
                                                byte[] filebytesIcon = UtilsHost.Redimensionar(Image.FromStream(new MemoryStream(bytes)), 100, 100, 32);

                                                string encodedDataIcon = extension + "," + Convert.ToBase64String(filebytesIcon, Base64FormattingOptions.None);
                                                institucion[0].institucion.icono.imagenBase64 = encodedDataIcon;
                                                institucion[0].institucion.icono.fecha_ult_modificacion = DateTime.Now;
                                            }
                                        }
                                    }

                                    //datos del representante
                                    institucion[0].nombre = nombre_r;
                                    institucion[0].apellido = apellido_r;
                                    institucion[0].tipo_identificacion = tipo_identificacion;
                                    institucion[0].identificacion = identificacion;
                                    institucion[0].urlCvlac = urlCvlac;
                                    institucion[0].correo_electronico = correo_electronico_r;
                                    institucion[0].fecha_ult_modificacion = DateTime.Now;

                                    //Envio email confirmacion edicion perfil
                                    StringBuilder bodyMail = new StringBuilder();
                                    bodyMail.AppendLine("Su Perfil ha sido editado exitosamente en biotecred.com .");
                                    bodyMail.AppendLine("Lo invitamos a que inicie sesión y continúe disfrutando de nuestra plataforma.");
                                    string subject = "Confirmación Edición de perfil.";
                                    Mail mail = new Mail(institucion[0].institucion.logueo.correo_electronico, subject, bodyMail);

                                    //Verifico si la institucion existe en el sistema
                                    List<Mensaje> lstVerificaExiste = existeInstitucion(institucion[0]);
                                    List<Mensaje> lstVerificaExisteEmail = mail.existeEmail();

                                    if (lstVerificaExiste.Count == 0 && lstVerificaExisteEmail.Count == 0)
                                    {
                                        institucion[0].fecha_ult_modificacion = DateTime.Now;
                                        _repositorio.SaveOrUpdate<Persona>(institucion[0]);
                                        long id_inst = institucion[0].id;
                                        //Elimino las relaciones de la entidad institucion con sectores y tipoBiotecnologia
                                        Expression<Func<InstitucionSector, bool>> query3 = (u => u.institucion.id == id_inst);
                                        _repositorio.DeleteFilter<InstitucionSector>(query3);
                                        Expression<Func<InstitucionTipoBiotec, bool>> query4 = (u => u.institucion.id == id_inst);
                                        _repositorio.DeleteFilter<InstitucionTipoBiotec>(query4);

                                        //almaceno las relaciones de la entidad institucion con sectores y tipoBiotecnologia
                                        foreach (Sector sector in lstSectores)
                                        {
                                            _repositorio.SaveOrUpdate(new InstitucionSector { institucion = institucion[0].institucion, sector = sector, fecha_ult_modificacion = DateTime.Now });
                                        }

                                        foreach (TipoBiotecnologia tipo in lstTipoBiotecnologia)
                                        {
                                            _repositorio.SaveOrUpdate(new InstitucionTipoBiotec { institucion = institucion[0].institucion, tipoBiotecnologia = tipo, fecha_ult_modificacion = DateTime.Now });
                                        }
                                        //Envio el correo de confirmacion
                                        if (mail.sendMail())
                                        {
                                            mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Institución editada exitosamente.");
                                        }
                                        else
                                        {
                                            mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "Se produjo un error mientras se enviaba el correo. Correo invalido");
                                        }
                                    }
                                    else
                                    {
                                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error validacion", "Existen campos que ya existen en el sistema.");
                                    }
                                }
                                else
                                {
                                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error Autenticación", "Institucion no encontrada.");
                                }
                            }
                            else
                            {
                                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error Autenticación", "Institución no encontrada.");
                            }
                        }
                        else
                        {
                            mensaje = new Mensaje(EnumTipoMensaje.Expiracion, "Error", "La sesion actual ha expirado. Inicie sesion");
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error Autenticación", "Token de autenticación requerido.");
                    }
                }
                else
                {
                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error Autenticación", "institucón no encontrada.");
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }

            return mensaje;
        }
        public List<Mensaje> existeInstitucion([FromBody]UtilsJson.AInstitucion institucion)
        {
            List<Mensaje> listado = new List<Mensaje>();

            Expression<Func<Institucion, bool>> query1;
            if (institucion.id > 0)
            {
                query1 = (u => (u.nombre.ToUpper() == institucion.nombre.ToUpper()
                            || u.correo_electronico.ToUpper() == institucion.correo_electronico.ToUpper()
                            || u.logueo.correo_electronico.ToUpper() == institucion.logueo.correo_electronico.ToUpper())
                            && u.id != institucion.id
                            && u.id != institucion.id
                            && u.logueo.id != institucion.logueo.id
                            );
            }
            else
            {
                query1 = (u => (u.nombre.ToUpper() == institucion.nombre.ToUpper()
                            || u.correo_electronico.ToUpper() == institucion.correo_electronico.ToUpper()
                            || u.logueo.correo_electronico.ToUpper() == institucion.logueo.correo_electronico.ToUpper())
                            );
            }

            List<Institucion> institucion_existe = _repositorio.Filter<Institucion>(query1);

            if (institucion_existe != null)
            {
                foreach (Institucion aux in institucion_existe)
                {
                    if (!string.IsNullOrWhiteSpace(aux.nombre) && aux.nombre.ToUpper().Equals(institucion.nombre.ToUpper()))
                    {
                        listado.Add(new Mensaje(EnumTipoMensaje.Error, "Error", "Ya Existe un perfil de institución con el nombre " + institucion.nombre + ". Verifique los datos suministrados"));
                    }
                    if (!string.IsNullOrWhiteSpace(aux.correo_electronico) && aux.correo_electronico.ToUpper().Equals(institucion.correo_electronico.ToUpper()))
                    {
                        listado.Add(new Mensaje(EnumTipoMensaje.Error, "Error", "Ya Existe un perfil de institución con el correo electronico " + institucion.correo_electronico + ". Verifique los datos suministrados"));
                    }
                    if (!string.IsNullOrWhiteSpace(aux.logueo.correo_electronico) && aux.logueo.correo_electronico.ToUpper().Equals(institucion.logueo.correo_electronico.ToUpper()))
                    {
                        listado.Add(new Mensaje(EnumTipoMensaje.Error, "Error", "El correo electronico de logueo " + institucion.logueo.correo_electronico + " ya se encuentra registrado en el sistema. Verifique los datos suministrados"));
                    }
                }
            }

            //Verifico la existencia del correo
            Mail mail = new Mail(institucion.logueo.correo_electronico, string.Empty, new StringBuilder());
            List<Mensaje> lstVerificaExisteEmail = mail.existeEmail();
            listado.AddRange(lstVerificaExisteEmail);

            return listado;
        }
        public Mensaje createInstitution([FromBody]UtilsJson.AInstitucion institution)
        {
            Mensaje mensaje = null;

            try
            {
                if (institution != null)
                {
                    //datos logueo
                    string correo_electronico_l = institution.logueo.correo_electronico;
                    string password1 = institution.logueo.contrasena1;
                    string password2 = institution.logueo.contrasena2;

                    //datos representante
                    string nombre_r = institution.representante.nombre;
                    string apellido_r = institution.representante.apellido;
                    string tipo_identificacion = institution.representante.tipo_identificacion;
                    string identificacion = institution.representante.identificacion;
                    string urlCvlac = institution.representante.urlCvlac;
                    string correo_electronico_r = institution.representante.correo_electronico;

                    //datos institucion
                    string codigo = institution.codigo_registro;
                    string nombre = institution.nombre;
                    string descripcion = institution.descripcion;
                    string correo_electronico = institution.correo_electronico;
                    string direccion_postal = institution.direccion_postal;
                    string facebook = institution.facebook;
                    string fax = institution.fax;
                    string impacto = institution.impacto;
                    string linkedin = institution.linkedin;
                    string naturaleza = institution.naturaleza;
                    string pagina_web = institution.pagina_web;
                    int tamano = institution.tamano;
                    string telefono = institution.telefono;
                    string tipo_institucion = institution.tipo_institucion;
                    string twitter = institution.twitter;
                    string constitucion = institution.constitucion;
                    string fecha_creacion = institution.fecha_creacion;
                    string latitud = institution.latitud;
                    string longitud = institution.longitud;
                    string imagen_base64 = institution.imagen_base64;
                    string tipo_empresa = (!String.IsNullOrWhiteSpace(institution.tipo_empresa)) ? institution.tipo_empresa : EnumTipoEmpresa.Compañia;
                    UtilsJson.AMunicipio municipio = institution.municipio;

                    UtilsJson.ASector[] sectores = institution.sectores;
                    UtilsJson.ATipoBiotecnologia[] Tipos_Biotecnologia = institution.Tipos_Biotecnologia;

                    if (codigo != null)
                    {
                        //verificacion de existencia y estado del codigo
                        Expression<Func<SolicitudRegistro, bool>> query = u => u.codigo == codigo && u.estado == true;
                        SolicitudRegistro solicitud = _repositorio.Get<SolicitudRegistro>(query);
                        //Si la solicitud existe y no se ha usado subo a session el codigo
                        if (solicitud != null)
                        {
                            Municipio municipioDb = null;

                            List<Sector> lstSectores = new List<Sector>();

                            List<TipoBiotecnologia> lstTipoBiotecnologia = new List<TipoBiotecnologia>();

                            if (municipio.id > 0)
                            {
                                municipioDb = _repositorio.Get<Municipio>(municipio.id);
                            }

                            if (sectores != null)
                            {
                                lstSectores = convertToSector(sectores);
                            }

                            if (Tipos_Biotecnologia != null)
                            {
                                lstTipoBiotecnologia = convertToTipoBiotecnologia(Tipos_Biotecnologia);
                            }

                            Institucion institucion_api = new Institucion();
                            if (password1.Equals(password2))
                            {
                                institucion_api.logueo = new LogueoInstitucion
                                {
                                    correo_electronico = correo_electronico_l,
                                    contrasena = CifradoDatos.cifrarPassword(password2),
                                    fecha_ult_modificacion = DateTime.Now,
                                    rol = EnumTipoRol.usuario
                                };

                                institucion_api.descripcion = descripcion;
                                institucion_api.impacto = impacto;
                                institucion_api.correo_electronico = correo_electronico;
                                institucion_api.latitud = latitud;
                                institucion_api.linkedin = linkedin;
                                institucion_api.longitud = longitud;
                                institucion_api.municipio = municipioDb;
                                institucion_api.naturaleza = naturaleza;
                                institucion_api.constitucion = constitucion;
                                institucion_api.nombre = nombre;
                                institucion_api.pagina_web = pagina_web;
                                institucion_api.tamano = tamano;
                                institucion_api.telefono = telefono;
                                institucion_api.fax = fax;
                                institucion_api.direccion_postal = direccion_postal;
                                institucion_api.facebook = facebook;
                                institucion_api.tipo_institucion = tipo_institucion;
                                institucion_api.twitter = twitter;
                                institucion_api.fecha_creacion = (!string.IsNullOrWhiteSpace(fecha_creacion)) ? Convert.ToDateTime(fecha_creacion) : (DateTime?)null;

                                if (institucion_api.banner == null)
                                {
                                    if (!string.IsNullOrWhiteSpace(imagen_base64))
                                    {
                                        institucion_api.banner = new Imagen { imagenBase64 = imagen_base64, fecha_ult_modificacion = DateTime.Now };

                                        //Redimension de la imagen y creacion de icono
                                        string extension = imagen_base64.Split(',')[0];
                                        imagen_base64 = imagen_base64.Split(',')[1];

                                        byte[] bytes = Convert.FromBase64String(imagen_base64);

                                        if (bytes.Length > 0)
                                        {
                                            byte[] filebytesIcon =UtilsHost.Redimensionar(Image.FromStream(new MemoryStream(bytes)), 100, 100, 32);

                                            string encodedDataIcon = extension + "," + Convert.ToBase64String(filebytesIcon, Base64FormattingOptions.None);
                                            institucion_api.icono = new Imagen { imagenBase64 = encodedDataIcon, fecha_ult_modificacion = DateTime.Now };
                                        }
                                    }
                                }
                                else
                                {
                                    if (!string.IsNullOrWhiteSpace(imagen_base64))
                                    {
                                        institucion_api.banner.imagenBase64 = imagen_base64;
                                        institucion_api.banner.fecha_ult_modificacion = DateTime.Now;

                                        //Redimension de la imagen y creacion de icono
                                        string extension = imagen_base64.Split(',')[0];
                                        imagen_base64 = imagen_base64.Split(',')[1];

                                        byte[] bytes = Convert.FromBase64String(imagen_base64);

                                        if (bytes.Length > 0)
                                        {
                                            byte[] filebytesIcon = UtilsHost.Redimensionar(Image.FromStream(new MemoryStream(bytes)), 100, 100, 32);

                                            string encodedDataIcon = extension + "," + Convert.ToBase64String(filebytesIcon, Base64FormattingOptions.None);
                                            institucion_api.icono.imagenBase64 = encodedDataIcon;
                                            institucion_api.icono.fecha_ult_modificacion = DateTime.Now;
                                        }
                                    }
                                }

                                //creo un nuevo representante para la institucion
                                Persona persona = new Persona
                                {
                                    nombre = nombre_r,
                                    apellido = apellido_r,
                                    tipo_identificacion = tipo_identificacion,
                                    identificacion = identificacion,
                                    urlCvlac = urlCvlac,
                                    correo_electronico = correo_electronico_r,
                                    tipoPersona = EnumTipoPersona.director,
                                    fecha_ult_modificacion = DateTime.Now,
                                    estado=true
                                };

                                //Genero el correo para confirmacion para habilitar el perfil
                                StringBuilder bodyMail = new StringBuilder();
                                //Creo un token de autenticacion para habilitar el perfil
                                string codigoEnabled = CifradoDatos.cifrarRSA(institucion_api.logueo.correo_electronico);
                                bodyMail.AppendLine("Para habilitar el perfil de la institucion " + institucion_api.nombre + " dirijase al siguiente enlace.");
                                string informacionHost = UtilsHost.serverInfoCurrent();
                                bodyMail.AppendLine("<a href=\"" + informacionHost + "/Institucion/HabilitarCuenta?tokenEnabled=" + codigoEnabled + "\">Activar perfil.</a>" + "</br>");
                                string subject = "Confirmación y habilitacion de perfil.";
                                Mail mail = new Mail(institucion_api.logueo.correo_electronico, subject, bodyMail);

                                //Verifico si la institucion existe en el sistema
                                List<Mensaje> lstVerificaExiste = existeInstitucion(persona);
                                List<Mensaje> lstVerificaExisteEmail = mail.existeEmail();
                                if (lstVerificaExiste.Count == 0 && lstVerificaExisteEmail.Count == 0)
                                {
                                    //Envio el correo de confirmacion
                                    if (mail.sendMail())
                                    {
                                        persona.institucion = institucion_api;
                                        _repositorio.SaveOrUpdate<Persona>(persona);

                                        //Elimino las relaciones de la entidad institucion con sectores y tipoBiotecnologia
                                        Expression<Func<InstitucionSector, bool>> query3 = u => u.institucion.id == institucion_api.id;
                                        _repositorio.DeleteFilter<InstitucionSector>(query3);
                                        Expression<Func<InstitucionTipoBiotec, bool>> query4 = u => u.institucion.id == institucion_api.id;
                                        _repositorio.DeleteFilter<InstitucionTipoBiotec>(query4);

                                        //almaceno las relaciones de la entidad institucion con sectores y tipoBiotecnologia
                                        foreach (Sector sector in lstSectores)
                                        {
                                            _repositorio.SaveOrUpdate(new InstitucionSector { institucion = institucion_api, sector = sector, fecha_ult_modificacion = DateTime.Now });
                                        }

                                        foreach (TipoBiotecnologia tipo in lstTipoBiotecnologia)
                                        {
                                            _repositorio.SaveOrUpdate(new InstitucionTipoBiotec { institucion = institucion_api, tipoBiotecnologia = tipo, fecha_ult_modificacion = DateTime.Now });
                                        }

                                        // Desabilito el codigoPreRegistro en el poll de codigo para que no se pueda volver a usar
                                        solicitud.estado = false;
                                        solicitud.fecha_ult_modificacion = DateTime.Now;
                                        _repositorio.SaveOrUpdate<SolicitudRegistro>(solicitud);

                                        mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Verifique el correo de logueo para activar el perfil.");
                                    }
                                    else
                                    {
                                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "Se produjo un error mientras se enviaba el correo. Correo invalido");
                                    }
                                }
                            }
                            else
                            {
                                mensaje = new Mensaje();
                                mensaje.titulo = "Error en validacion de password diferente";
                                mensaje.tipo = "Error";
                                mensaje.cuerpo = "Error en validacion de password diferente";
                            }
                        }
                        else
                        {
                            mensaje = new Mensaje();
                            mensaje.titulo = "Error en validacion de codigo";
                            mensaje.tipo = "Error";
                            mensaje.cuerpo = "Error el codigo no existe o ya fue utilizado";
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje();
                        mensaje.titulo = "Error en validacion de codigo";
                        mensaje.tipo = "Error";
                        mensaje.cuerpo = "Error el codigo es requerido";
                    }
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }

            return mensaje;
        }