Пример #1
0
        public static void GuardarObjeto(ObjetoBase objetoGuardar)
        {
            Type tipo = objetoGuardar.GetType();

            if (!almacen.ContainsKey(tipo))
            {
                almacen.Add(tipo, new Dictionary <long, ObjetoBase>());
            }

            if (almacen[tipo].ContainsKey(objetoGuardar.Id))
            {
                if (ActivarLog)
                {
                    Log.EscribirLog("ALAMCEN <-   : ACTUALIZADO. [OBJETO: " + tipo.Name + " ID: " + objetoGuardar.Id + "]");
                }
                almacen[tipo][objetoGuardar.Id] = objetoGuardar;
            }
            else
            {
                if (ActivarLog)
                {
                    Log.EscribirLog("ALAMCEN <-   : AGREGADO [OBJETO: " + tipo.Name + " ID: " + objetoGuardar.Id + "]");
                }
                almacen[tipo].Add(objetoGuardar.Id, objetoGuardar);
            }
        }
Пример #2
0
        public void GuardarAsincrono(String identificador, ObjetoBase objBase)
        {
            PaqueteGuardado p = new PaqueteGuardado();

            p.ObjetoBaseGuardar = objBase;
            p.Identificador     = identificador;
            asincrono           = new Thread(guardarAsincrono);
            asincrono.Start((Object)p);
        }
Пример #3
0
        private Boolean existeObjetoModificado(ObjetoBase objAgregado)
        {
            foreach (ObjetoBase obj in objetosModificados)
            {
                Type t  = obj.GetType();
                Type t2 = objAgregado.GetType();

                if (t == t2 && objAgregado.Id == obj.Id)
                {
                    return(true);
                }
            }
            return(false);
        }
Пример #4
0
        public T CrearObjeto <T>()
        {
            var obj = typeof(T)
                      .GetConstructor(Type.EmptyTypes)
                      .Invoke(null);

            ObjetoBase objBase = (ObjetoBase)obj;

            objBase.DBAccesoOBJ = this.dbAcceso;
            objBase.Manejador   = this;


            return((T)obj);
        }
Пример #5
0
        public long Guardar(ObjetoBase objBase)
        {
            try
            {
                objBase.Manejador = this;
                AlmacenObjetos.GuardarObjeto(objBase);

                objBase.DBAccesoOBJ         = this.dbAcceso;
                objBase.SUsuarioResponsable = ObjetoBase.UsuarioLogueado;
                return(objBase.Guardar());
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
Пример #6
0
 public static ObjetoBase ObtenerObjeto(Type tipo, long id)
 {
     if (almacen.ContainsKey(tipo))
     {
         if (almacen[tipo].ContainsKey(id))
         {
             if (ActivarLog)
             {
                 Log.EscribirLog("ALAMCEN    ->: OBTENIDO [OBJETO: " + tipo.Name + " ID: " + id + "]");
             }
             ObjetoBase objeto = almacen[tipo][id];
             //objeto.EliminarCache();
             return(objeto);
         }
     }
     return(null);
 }
Пример #7
0
 public void AgregarObjetoModificado(ObjetoBase objetoBase)
 {
     if (objetoBase.Id < 0)
     {
         return;
     }
     else if (objetoBase.Id == 0)
     {
         if (!objetosNuevos.Contains(objetoBase))
         {
             objetosNuevos.Add(objetoBase);
         }
     }
     else if (!existeObjetoModificado(objetoBase))
     {
         objetosModificados.Add(objetoBase);
     }
 }
Пример #8
0
 //agregar un elemento a lista
 public void AgregadoRapidoAListaRelacionada(ObjetoBase objeto, String nombreLista)
 {
     try
     {
         Type   tipo = this.GetType();
         String nombreTablaRelacion = tipo.Name + "_X_" + objeto.GetType().Name + "_" + nombreLista;
         objeto.dbAcceso = this.dbAcceso;
         long   idObjetoLista = objeto.Guardar();
         String query         = "insert into " + nombreTablaRelacion + "(_Contenedor, _Contenido) values (@_Contenedor, @_Contenido)";
         dbAcceso.EjecutarConsulta(query, new List <object>()
         {
             id, idObjetoLista
         });
     }
     catch (Exception ex)
     {
         throw new Exception(ex.Message);
     }
 }
Пример #9
0
        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                // Liberar recursos manejados

                Type        tipo      = this.GetType();
                FieldInfo[] atributos = tipo.GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);

                foreach (FieldInfo atributo in atributos)
                {
                    if (atributo.FieldType.Name.Contains("List"))
                    {
                        IList lista = (IList)atributo.GetValue(this);
                        if (lista != null)
                        {
                            lista.Clear();
                        }
                        atributo.SetValue(this, null);
                    }
                    else if (atributo.FieldType.Name.StartsWith("_"))
                    {
                        ObjetoBase objB = (ObjetoBase)atributo.GetValue(this);
                        if (objB != null)
                        {
                            atributo.SetValue(this, null);
                        }
                    }
                    else
                    {
                        atributo.SetValue(this, null);
                    }
                }
            }
            dbAcceso  = null;
            manejador = null;
            AtributosCargadosPorPropiedad.Clear();
            AtributosCargadosPorPropiedad = null;
            AtributosCargadosPorPropiedadCopia.Clear();
            AtributosCargadosPorPropiedadCopia = null;
            this.id = -1;
        }
Пример #10
0
        public long Guardar()
        {
            try
            {
                Type tipo = this.GetType();
                if (id < 0)
                {
                    return(-1);
                }
                if (this.esModificado)
                {
                    FieldInfo[]   atributos = tipo.GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                    String        consulta  = "";
                    List <Object> valores   = new List <object>();
                    //actualizando datos de auditoria
                    if (id == 0)
                    {
                        dtFechaCreacion  = manejador.ObtenerFechaHoraServidor();
                        sUsuarioCreacion = ObjetoBase.UsuarioLogueado;
                    }
                    dtFechaModificacion  = manejador.ObtenerFechaHoraServidor();
                    sUsuarioModificacion = ObjetoBase.UsuarioLogueado;

                    //-----------------------------
                    if (id != 0)
                    {
                        consulta = "update " + tipo.Name + " set ";
                        foreach (FieldInfo atributo in atributos)
                        {
                            if (atributo.Name.Equals("dtFechaCreacion") || atributo.Name.Equals("dtFechaModificacion") || atributo.Name.Equals("sUsuarioCreacion") || atributo.Name.Equals("sUsuarioModificacion") || atributo.Name.Equals("estaDeshabilitado"))
                            {
                            }
                            else if (!atributo.Name.StartsWith("_") || atributo.FieldType.Name.Contains("List") || atributo.FieldType.Name.StartsWith("_"))
                            {
                                //|| atributo.Name.Equals("dtFechaCreacion") || atributo.Name.Equals("dtFechaModificacion") || atributo.Name.Equals("sUsuarioCreacion") || atributo.Name.Equals("sUsuarioModificacion"))
                                continue; // se ignoran las listas de objetos relacionados y los objetos relacionados
                            }
                            Object valorAtributo = atributo.GetValue(this);
                            if (valorAtributo != null)
                            {
                                consulta += atributo.Name + " = @" + atributo.Name + ", ";
                                valores.Add(valorAtributo);
                            }
                            else
                            {
                                consulta += atributo.Name + " = NULL, ";
                            }
                        }
                        consulta  = consulta.Substring(0, consulta.Length - 2);
                        consulta += " where id = @id; select @id;";
                        valores.Add(id);
                    }
                    else
                    {
                        consulta = "insert " + tipo.Name + "(";
                        foreach (FieldInfo atributo in atributos)
                        {
                            if (atributo.Name.Equals("dtFechaCreacion") || atributo.Name.Equals("dtFechaModificacion") || atributo.Name.Equals("sUsuarioCreacion") || atributo.Name.Equals("sUsuarioModificacion") || atributo.Name.Equals("estaDeshabilitado"))
                            {
                            }
                            else if (!atributo.Name.StartsWith("_") || atributo.FieldType.Name.Contains("List") || atributo.FieldType.Name.StartsWith("_"))
                            {
                                //|| atributo.Name.Equals("dtFechaCreacion") || atributo.Name.Equals("dtFechaModificacion") || atributo.Name.Equals("sUsuarioCreacion") || atributo.Name.Equals("sUsuarioModificacion"))
                                continue; // se ignoran las listas de objetos relacionados y los objetos relacionados
                            }
                            consulta += atributo.Name + ", ";
                        }
                        consulta  = consulta.Substring(0, consulta.Length - 2);
                        consulta += ") values(";
                        foreach (FieldInfo atributo in atributos)
                        {
                            if (atributo.Name.Equals("dtFechaCreacion") || atributo.Name.Equals("dtFechaModificacion") || atributo.Name.Equals("sUsuarioCreacion") || atributo.Name.Equals("sUsuarioModificacion") || atributo.Name.Equals("estaDeshabilitado"))
                            {
                            }
                            else if (!atributo.Name.StartsWith("_") || atributo.FieldType.Name.Contains("List") || atributo.FieldType.Name.StartsWith("_"))
                            {
                                continue; // se ignoran las listas de objetos relacionados y los objetos relacionados
                            }
                            Object valorAtributo = atributo.GetValue(this);
                            if (valorAtributo != null)
                            {
                                consulta += "@" + atributo.Name + ", ";
                                valores.Add(valorAtributo);
                            }
                            else
                            {
                                consulta += "NULL, ";
                            }
                        }
                        consulta  = consulta.Substring(0, consulta.Length - 2);
                        consulta += "); select IDENT_CURRENT ('" + tipo.Name + "');";
                    }

                    DataTable dt = DBAccesoOBJ.EjecutarConsulta(consulta, valores);
                    id = Convert.ToInt64(dt.Rows[0][0]);
                    //Log.EscribirLog(consulta);
                }
                if (AtributosCargadosPorPropiedad.Count > 0)
                {
                    String        consulta2 = "update " + tipo.Name + " set ";
                    List <Object> valores2  = new List <object>();
                    List <String> temp      = new List <string>();
                    temp.AddRange(AtributosCargadosPorPropiedad);
                    Boolean guardoRElaciondo = false;
                    foreach (String atributo in temp)
                    {
                        FieldInfo atrib = tipo.GetField(atributo, BindingFlags.Instance | BindingFlags.NonPublic);
                        if (atrib.FieldType.Name.StartsWith("_"))//si entra entonces es un objeto relacionado y se tiene q considerar
                        {
                            FieldInfo  campo  = this.GetType().GetField(atributo, BindingFlags.NonPublic | BindingFlags.Instance);
                            ObjetoBase objRel = (ObjetoBase)campo.GetValue(this);
                            if (esModificado)
                            {
                                if (objRel != null)
                                {
                                    AtributosCargadosPorPropiedad.Remove(atributo);
                                    long idRel = objRel.id;
                                    if (objRel.esModificado)
                                    {
                                        objRel.DBAccesoOBJ = DBAccesoOBJ;
                                        objRel.manejador   = manejador;
                                        idRel = objRel.Guardar();
                                    }
                                    if (idRel != 0)
                                    {
                                        guardoRElaciondo = true;
                                        consulta2       += atributo + " = @" + atributo + ", ";
                                        valores2.Add(idRel);
                                    }
                                }
                                else
                                {
                                    guardoRElaciondo = true;
                                    AtributosCargadosPorPropiedad.Remove(atributo);
                                    consulta2 += atributo + " = NULL, ";
                                }
                            }
                            else
                            {
                                AtributosCargadosPorPropiedad.Remove(atributo);
                            }
                        }
                    }
                    if (guardoRElaciondo)
                    {
                        consulta2  = consulta2.Substring(0, consulta2.Length - 2);
                        consulta2 += " where id = @id";
                        valores2.Add(id);
                        DBAccesoOBJ.EjecutarConsulta(consulta2, valores2);
                        //Log.EscribirLog(consulta2);
                    }
                }
                this.esModificado = false;

                if (AtributosCargadosPorPropiedad.Count > 0)
                {
                    List <Object> valores2 = new List <object>();
                    List <String> temp     = new List <string>();
                    temp.AddRange(AtributosCargadosPorPropiedad);
                    foreach (String atributo in temp)
                    {
                        FieldInfo atrib = tipo.GetField(atributo, BindingFlags.Instance | BindingFlags.NonPublic);
                        if (atrib.FieldType.Name.Contains("List"))//si entra entonces es una lista relacionada y se tiene q considerar
                        {
                            AtributosCargadosPorPropiedad.Remove(atributo);

                            String nombreTabla         = tipo.Name + "_X_" + atrib.FieldType.GetGenericArguments()[0].Name + "_" + atrib.Name;
                            String eliminacionConsulta = "delete " + nombreTabla + " where _contenedor = @id";
                            dbAcceso.EjecutarConsulta(eliminacionConsulta, new List <object>()
                            {
                                id
                            });
                            //Log.EscribirLog(eliminacionConsulta);
                            IList listaObjetos = (IList)atrib.GetValue(this);
                            if (listaObjetos != null)
                            {
                                foreach (ObjetoBase objBaseLista in listaObjetos)
                                {
                                    long idTempLista = objBaseLista.id;
                                    if (objBaseLista.esModificado)
                                    {
                                        objBaseLista.DBAccesoOBJ = this.DBAccesoOBJ;
                                        objBaseLista.Manejador   = manejador;
                                        idTempLista = objBaseLista.Guardar();
                                    }
                                    String consultaAgregadoRelacionado = "insert " + nombreTabla + " (_contenedor,_contenido,_fecha) values(@_contenedor, @_contenido, @_fecha);";
                                    dbAcceso.EjecutarConsulta(consultaAgregadoRelacionado, new List <object>()
                                    {
                                        id, idTempLista, DateTime.Now
                                    });
                                    //Log.EscribirLog(consultaAgregadoRelacionado);
                                }
                            }
                        }
                    }
                }
                return(id);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
Пример #11
0
        public List <ObjetoBase> Cargar(Type tipo, String consulta, List <Object> valores)
        {
            //--------------------------------------------------------------------------------------
            //--------------------------------------------------------------------------------------
            //AQUI SE TIENE Q BUSCAR LA SEPARACION DE BUSQUEDAS ENTRE ALMACEN DE OBJETOS Y BASE DE DATOS
            //--------------------------------------------------------------------------------------
            //--------------------------------------------------------------------------------------
            try
            {
                DataTable         resultado = null;
                List <ObjetoBase> retorno   = null;


                //la consulta se cambia, para q solamente traiga IDS de la base de datos.
                String  consultaIDS = ModificarConsultaParaAlmacen(consulta);
                Boolean TrajoIDS    = false;
                //UsarAlmacenObjetos = false; //deshabilitamos el almacen de objetos
                // se intenta usar la consulta modificada
                if (UsarAlmacenObjetos)
                {
                    try
                    {
                        //se traen los ids de los objetos y se marca la variable de control
                        resultado = this.dbAcceso.EjecutarConsulta(consultaIDS, valores);
                        TrajoIDS  = true;
                    }
                    catch
                    {
                        //si ocurrio un error, y se debio a que la consulta estaba mal modificada, entonces
                        //se usa la consulta original.

                        resultado = this.dbAcceso.EjecutarConsulta(consulta, valores);
                    }
                }
                if (TrajoIDS)
                {
                    retorno = new List <ObjetoBase>();
                    List <long> idsRestantes = new List <long>();
                    ObjetoBase  objetoTemp   = null;
                    foreach (DataRow dr in resultado.Rows)
                    {
                        long idT = Convert.ToInt64(dr["id"]);
                        objetoTemp = AlmacenObjetos.ObtenerObjeto(tipo, idT);
                        if (objetoTemp != null)
                        {
                            retorno.Add(objetoTemp);
                            //Log.EscribirLog("ALMACEN: RETORNADO [tipo: "+tipo.Name+", id: "+idT+"].");
                        }
                        else
                        {
                            idsRestantes.Add(idT);
                            retorno.Add(null);
                        }
                    }
                    if (idsRestantes.Count > 0)
                    {
                        String stridsRestantes = "";
                        foreach (long idR in idsRestantes)
                        {
                            stridsRestantes += "(" + idR + "), ";
                        }
                        stridsRestantes = stridsRestantes.Substring(0, stridsRestantes.Length - 2);
                        //String consultaIdStr = "select * from " + tipo.Name + " where id in " + stridsRestantes;

                        String consultaIdStr = @"select tabla.* from " + tipo.Name + @" as tabla
                                                inner join (values " + stridsRestantes + @") as Valores(id) 
                                                on tabla.id = Valores.id;";

                        DataTable resultado2 = dbAcceso.EjecutarConsulta(consultaIdStr); // id = @id", new List<object>() { idT });

                        if (resultado2.Rows.Count > 0)
                        {
                            IList retorTemp = dbAcceso.MapearDataTableAObjecto(tipo, resultado2);
                            int   i         = 0;
                            foreach (ObjetoBase o in retorTemp)
                            {
                                AlmacenObjetos.GuardarObjeto(o);

                                for (; i < retorno.Count; i++)
                                {
                                    if (retorno[i] == null)
                                    {
                                        retorno[i] = o;
                                        break;
                                    }
                                }

                                //retorno.Add(o);
                                //Log.EscribirLog("ALMACEN: AGREGADO [tipo: " + tipo.Name + ", id: " + idT + "].");
                            }
                        }
                    }
                }
                else
                {
                    resultado = this.dbAcceso.EjecutarConsulta(consulta, valores);
                    //Log.EscribirLog("ALMACEN: ERROR Fallo al convertir la consulta.");
                    if (resultado.Rows.Count > 0)
                    {
                        retorno = dbAcceso.MapearDataTableAObjecto(tipo, resultado).Cast <ObjetoBase>().ToList();
                        foreach (ObjetoBase o in retorno)
                        {
                            o.Manejador = this;
                            AlmacenObjetos.GuardarObjeto(o);
                        }
                    }
                }

                if (retorno != null)
                {
                    foreach (ObjetoBase objBase in retorno)
                    {
                        objBase.Manejador   = this;
                        objBase.DBAccesoOBJ = dbAcceso;
                    }
                }

                //resultado = this.dbAcceso.EjecutarConsulta(consulta, valores);

                //if (resultado.Rows.Count > 0)
                //{
                //    retorno = dbAcceso.MapearDataTableAObjecto(tipo, resultado);
                //    foreach (ObjetoBase o in retorno)
                //    {
                //        AlmacenObjetos.GuardarObjeto(o);
                //    }
                //}

                if (retorno == null)
                {
                    return(null);
                }
                return(retorno.Cast <ObjetoBase>().ToList());
            }
            catch (Exception ex) { throw new Exception(ex.Message); }
        }