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); } }
//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); } }
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); } }