public string Modificar(ProductoJoinProductoConDetallesJoinDetalleProductoViewModel productoConNuevosValores)
        {
            string res = "false";

            using (var ctx = new palominoEntities())
            {
                using (var dbContextTransaction = ctx.Database.BeginTransaction(IsolationLevel.Serializable))
                {
                    try
                    {   //Verifico que el Producto este activo
                        var listaIdsYEstado = (from s in ctx.Producto
                                               select new { s.Id, s.Activo }).ToList();

                        var listaIdsActivos = (from item in listaIdsYEstado
                                               where item.Activo == true
                                               select item.Id).ToList();

                        int idBuscado = listaIdsActivos.Find(id => id == productoConNuevosValores.Producto_Id);

                        //Verifico que el DetalleProducto este activo
                        var listaIdsDetalleProducto = (from x in ctx.DetalleProducto
                                                       select new { x.Id, x.Activo }).ToList();

                        var listaIdsDetalleProductoActivos = (from x in listaIdsDetalleProducto
                                                              where x.Activo == true
                                                              select x.Id).ToList();

                        var otroIdBuscado = listaIdsDetalleProductoActivos.Find(item => item == productoConNuevosValores.DetalleProducto_Id);

                        //Busco el Id de usuario que necesitare, y ver que este activo
                        var resumenUsuarios = (from x in ctx.Usuario
                                               select new { x.Id, x.Usuario1, x.Activo }).ToList();
                        var usuarioActivoBuscado = resumenUsuarios.SingleOrDefault(item => (item.Id == productoConNuevosValores.DetalleProducto_IdUsuarioAlta) &&
                                                                                   (item.Activo == true));

                        if ((idBuscado > 0) && (otroIdBuscado > 0) && (usuarioActivoBuscado != null))       // Aqui se comprueba lo anterior
                        {
                            var resumenProductoConDetalles = (from s in ctx.ProductoConDetalles
                                                              where s.IdProducto == productoConNuevosValores.Producto_Id
                                                              select new { s.IdDetalleProducto }).ToList();

                            var resumenDetalleProducto = (from c in ctx.DetalleProducto
                                                          select new { c.Id, c.Activo }).ToList();

                            var fila = (from a in resumenProductoConDetalles
                                        join b in resumenDetalleProducto
                                        on a.IdDetalleProducto equals b.Id
                                        where b.Activo == true
                                        select b.Id).ToList();

                            var elementoUnico = fila.Single();

                            DetalleProducto detalleProducto = ctx.DetalleProducto.Find(elementoUnico);
                            detalleProducto.Activo            = false;
                            detalleProducto.IdUsuarioModifico = productoConNuevosValores.DetalleProducto_IdUsuarioModifico;
                            detalleProducto.FechaModificacion = productoConNuevosValores.DetalleProducto_FechaModificacion;

                            //crear nuevo
                            var resumenIdsEnDetalleProducto = (from s in resumenDetalleProducto
                                                               select s.Id).ToList();

                            int             idNuevoParaDetalleProducto = resumenIdsEnDetalleProducto.Max() + 1;
                            DetalleProducto nuevoDetalleProducto       = new DetalleProducto();
                            nuevoDetalleProducto.Id                = idNuevoParaDetalleProducto;
                            nuevoDetalleProducto.Nombre            = productoConNuevosValores.DetalleProducto_Nombre;
                            nuevoDetalleProducto.Activo            = true;
                            nuevoDetalleProducto.IdUsuarioAlta     = productoConNuevosValores.DetalleProducto_IdUsuarioAlta;
                            nuevoDetalleProducto.IdUsuarioModifico = productoConNuevosValores.DetalleProducto_IdUsuarioModifico;
                            nuevoDetalleProducto.FechaAlta         = productoConNuevosValores.DetalleProducto_FechaAlta;
                            nuevoDetalleProducto.FechaModificacion = productoConNuevosValores.DetalleProducto_FechaModificacion;
                            ctx.DetalleProducto.Add(nuevoDetalleProducto);

                            ProductoConDetalles productoConDetalles = new ProductoConDetalles();
                            productoConDetalles.IdProducto        = productoConNuevosValores.Producto_Id;
                            productoConDetalles.IdDetalleProducto = idNuevoParaDetalleProducto;
                            productoConDetalles.Activo            = true;
                            productoConDetalles.IdUsuarioAlta     = productoConNuevosValores.DetalleProducto_IdUsuarioAlta;
                            productoConDetalles.IdUsuarioModifico = productoConNuevosValores.DetalleProducto_IdUsuarioModifico;
                            productoConDetalles.FechaAlta         = productoConNuevosValores.DetalleProducto_FechaAlta;
                            productoConDetalles.FechaModificacion = productoConNuevosValores.DetalleProducto_FechaModificacion;
                            ctx.ProductoConDetalles.Add(productoConDetalles);

                            ctx.SaveChanges();
                            res = "ok";
                        }
                        else
                        {
                            res = "No esta disponible el producto a modificar";
                        }
                        dbContextTransaction.Commit();
                    }

                    catch (Exception ex)
                    {
                        dbContextTransaction.Rollback();
                        throw new Exception("Excepcion cachada y lanzada en ProductoLN.Modificar", ex);
                    }
                }
            }

            return(res);
        }
        //---------------------------Methods
        public string Crear(ProductoViewModel productoViewModel)
        {
            string mensaje = "";

            using (var ctx = new palominoEntities())
            {
                using (var dbContextTransaction = ctx.Database.BeginTransaction(IsolationLevel.Serializable))
                {
                    try
                    {   //Buscar los codigosBarras del usuario operador
                        var codigosBarrasExisten = (from s in ctx.Producto
                                                    where s.IdUsuarioAlta == productoViewModel.IdUsuarioAlta
                                                    select s.CodigoBarras
                                                    ).ToList();
                        bool existeProductoEnActivosOInactivos = productoViewModel.ExisteEn(codigosBarrasExisten);

                        //Busco el Id de usuario que necesitare, y ver que este activo
                        var resumenUsuarios = (from x in ctx.Usuario
                                               select new { x.Id, x.Usuario1, x.Activo }).ToList();

                        var usuarioActivoBuscado = resumenUsuarios.SingleOrDefault(item => (item.Id == productoViewModel.IdUsuarioAlta) &&
                                                                                   (item.Activo == true));

                        if (!existeProductoEnActivosOInactivos && (usuarioActivoBuscado != null))
                        {
                            var listaIdsProducto = (from s in ctx.Producto
                                                    select s.Id).ToList();
                            int      idUltimoEnProducto = listaIdsProducto.Count() == 0 ? 0 : listaIdsProducto.Max();
                            Producto p = new Producto();   //Producto es una clase del edmx
                            p.Id                = idUltimoEnProducto + 1;
                            p.CodigoBarras      = productoViewModel.CodigoBarras;
                            p.IdUsuarioAlta     = productoViewModel.IdUsuarioAlta;
                            p.FechaAlta         = productoViewModel.FechaAlta;
                            p.IdUsuarioModifico = productoViewModel.IdUsuarioModifico;
                            p.FechaModificacion = productoViewModel.FechaModificacion;
                            p.Activo            = true;
                            ctx.Producto.Add(p);


                            var idsDetalleProducto = (from s in ctx.DetalleProducto
                                                      select s.Id).ToList();
                            int             idUltimoEnDetalleProduto = idsDetalleProducto.Count() == 0 ? 0 : idsDetalleProducto.Max();
                            DetalleProducto detalleProducto          = new DetalleProducto();
                            detalleProducto.Id                = idUltimoEnDetalleProduto + 1;
                            detalleProducto.Nombre            = productoViewModel.Nombre;
                            detalleProducto.IdUsuarioAlta     = productoViewModel.IdUsuarioAlta;
                            detalleProducto.IdUsuarioModifico = productoViewModel.IdUsuarioModifico;
                            detalleProducto.FechaAlta         = productoViewModel.FechaAlta;
                            detalleProducto.FechaModificacion = productoViewModel.FechaModificacion;
                            detalleProducto.Activo            = true;
                            ctx.DetalleProducto.Add(detalleProducto);

                            ProductoConDetalles productoConDetalles = new ProductoConDetalles();
                            productoConDetalles.IdProducto        = p.Id;
                            productoConDetalles.IdDetalleProducto = detalleProducto.Id;
                            productoConDetalles.IdUsuarioAlta     = productoViewModel.IdUsuarioAlta;
                            productoConDetalles.FechaAlta         = productoViewModel.FechaAlta;
                            productoConDetalles.IdUsuarioModifico = productoViewModel.IdUsuarioModifico;
                            productoConDetalles.FechaModificacion = productoViewModel.FechaModificacion;
                            productoConDetalles.Activo            = true;
                            ctx.ProductoConDetalles.Add(productoConDetalles);

                            ctx.SaveChanges();
                            mensaje = "ok";
                        }

                        else
                        {
                            mensaje = existeProductoEnActivosOInactivos == true ? "Ya existe este código de barras en la BD" : "El usuario esta inactivo";
                        }
                        dbContextTransaction.Commit();
                    }

                    catch (Exception ex)
                    {
                        dbContextTransaction.Rollback();
                        throw new Exception("Excepcion cachada y lanzada en ProductoLN.Crear", ex);
                    }
                }
            }
            return(mensaje);
        }