public ResponseModel Guardar()
        {
            var rm = new ResponseModel();

            try
            {
                using (var ctx = new PortafolioContext())
                {
                    if (this.id > 0)
                    {
                        ctx.Entry(this).State = EntityState.Modified;
                    }
                    else
                    {
                        ctx.Entry(this).State = EntityState.Added;
                    }

                    ctx.SaveChanges();
                    rm.SetResponse(true);
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(rm);
        }
        public AnexGRIDResponde Listar(AnexGRID grid, int usuario_id)
        {
            try
            {
                using (var ctx = new PortafolioContext())
                {
                    ctx.Configuration.LazyLoadingEnabled = false;
                    grid.Inicializar();
                    var query = ctx.Habilidad.Where(x => x.Usuario_id == usuario_id);
                    // ordenamineto
                    if (grid.columna == "id")
                    {
                        query = grid.columna_orden == "DESC" ? query.OrderByDescending(x => x.id) : query.OrderBy(x => x.id);
                    }
                    if (grid.columna == "Nombre")
                    {
                        query = grid.columna_orden == "DESC" ? query.OrderByDescending(x => x.Nombre) : query.OrderBy(x => x.Nombre);
                    }
                    if (grid.columna == "Dominio")
                    {
                        query = grid.columna_orden == "DESC" ? query.OrderByDescending(x => x.Dominio) : query.OrderBy(x => x.Dominio);
                    }

                    // id, nombre, titulo, desde, hasta
                    var Habilidad = query.Skip(grid.pagina).Take(grid.limite).ToList();
                    var total     = query.Count();
                    grid.SetData(Habilidad, total);
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(grid.responde());
        }
        public Usuario Obtener(int id, bool include = false)
        {
            var usuario = new Usuario();

            try
            {
                using (var ctx = new PortafolioContext())
                {
                    if (!include)
                    {
                        usuario = ctx.Usuario.Where(x => x.id == id).SingleOrDefault();
                    }
                    else
                    {
                        usuario = ctx.Usuario.Include("Experiencia")
                                  .Include("Habilidad")
                                  .Include("Testimonio")
                                  .Where(x => x.id == id).SingleOrDefault();
                    }
                    // obteniando un registro adicional de manera manual, sin usar include
                    usuario.Pais = new TablaDato().Obtener("pais", usuario.Pais_id.ToString());
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(usuario);
        }
        public ResponseModel Acceder(string Email, string Password)
        {
            var rm = new ResponseModel();

            try
            {
                using (var ctx = new PortafolioContext())
                {
                    Password = HashHelper.MD5(Password);
                    var usuario = ctx.Usuario.Where(x => x.Email == Email)
                                  .Where(x => x.Password == Password)
                                  .SingleOrDefault();

                    if (usuario != null)
                    {
                        SessionHelper.AddUserToSession(usuario.id.ToString());
                        rm.SetResponse(true);
                    }
                    else
                    {
                        rm.SetResponse(false, "Correo o contraseƱa incorrecta");
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(rm);
        }
        public ResponseModel Guardar(HttpPostedFileBase Foto)
        {
            var rm = new ResponseModel();

            try
            {
                using (var ctx = new PortafolioContext())
                {
                    ctx.Configuration.ValidateOnSaveEnabled = false;

                    var eUsuario = ctx.Entry(this);
                    eUsuario.State = EntityState.Modified;

                    // campos que estamos ignorando
                    if (Foto != null)
                    {
                        // Nombre del archivo, es decir, lo reno,renombramos para que no se reptita nunca
                        string archivo = DateTime.Now.ToString("yyyyMMddHHmmss") + Path.GetExtension(Foto.FileName);

                        // la ruta donde lo vamos a guardar
                        Foto.SaveAs(HttpContext.Current.Server.MapPath("~/Uploads/" + archivo));

                        // establecemos en nuectro modelo el nombre de archivo
                        this.Foto = archivo;
                    }
                    else
                    {
                        eUsuario.Property(x => x.Foto).IsModified = false;
                    }

                    if (this.Password == null)
                    {
                        eUsuario.Property(x => x.Password).IsModified = false;
                    }

                    ctx.SaveChanges();
                    rm.SetResponse(true);
                }
            }
            catch (DbEntityValidationException e)
            {
                throw;
            }
            catch (Exception)
            {
                throw;
            }
            return(rm);
        }
        public Habilidad Obtener(int id)
        {
            var habilidad = new Habilidad();

            try
            {
                using (var ctx = new PortafolioContext())
                {
                    habilidad = ctx.Habilidad.Where(x => x.id == id).SingleOrDefault();
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(habilidad);
        }
        public Testimonio Obtener(int id)
        {
            var testimonio = new Testimonio();

            try
            {
                using (var ctx = new PortafolioContext())
                {
                    testimonio = ctx.Testimonio.Where(x => x.id == id).SingleOrDefault();
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(testimonio);
        }
        public TablaDato Obtener(string relacion, string valor)
        {
            var datos = new TablaDato();

            try
            {
                using (var ctx = new PortafolioContext())
                {
                    datos = ctx.TablaDato.Where(x => x.Relacion == relacion).Where(x => x.Valor == valor).SingleOrDefault();
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(datos);
        }
        public List <TablaDato> Listar(string relacion)
        {
            var datos = new List <TablaDato>();

            try
            {
                using (var ctx = new PortafolioContext())
                {
                    datos = ctx.TablaDato.OrderBy(x => x.Orden).Where(x => x.Relacion == relacion).ToList();
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(datos);
        }
        public Experiencia Obtener(int id)
        {
            var experiencia = new Experiencia();

            try
            {
                using (var ctx = new PortafolioContext())
                {
                    experiencia = ctx.Experiencia.Where(x => x.id == id).SingleOrDefault();
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(experiencia);
        }
        public ResponseModel Eliminar(int id)
        {
            var rm = new ResponseModel();

            try
            {
                using (var ctx = new PortafolioContext())
                {
                    this.id = id;
                    ctx.Entry(this).State = EntityState.Deleted;
                    ctx.SaveChanges();
                    rm.SetResponse(true);
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(rm);
        }