public static void ValidaVersionConcurrencia <T>(T obj, IClienteBD cliente) where T : CLASE_BASE { String queryConsulta = ""; //obteniendo el nombre de la tabla ANC_Tabla nombreTabla = obj.GetType().GetCustomAttribute <ANC_Tabla>(true); //buscando el campo ultima_act PropertyInfo pi = typeof(T).GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public).ToList().Where(y => y.GetCustomAttribute <ANP_CampoVersionamiento>() != null).FirstOrDefault(); if (pi != null) { //significa que la tabla cuenta con campo de versionado ANP_CampoVersionamiento cv = pi.GetCustomAttribute <ANP_CampoVersionamiento>(); String condicionBusqueda = Estructura.ObtenCondicionBusquedaWhere <T>(obj); queryConsulta = "SELECT " + pi.Name + " FROM " + nombreTabla.Nombre + " WHERE " + condicionBusqueda; DataTable dt = cliente.EjecutarSelect(queryConsulta); if (dt.Rows.Count > 0) { Int64 valorBDVersion = Convert.ToInt64(dt.Rows[0][0]); Int64 valorActualVersion = Convert.ToInt64(pi.GetValue(obj)); if (valorBDVersion >= valorActualVersion) { throw new EX_ErrorConcurrencia(obj, "El registro fue actualizado desde otra ubicación.", pi.Name, valorActualVersion, valorBDVersion); } } } }
public T ZMX_ConsultarUnico <T>(String query) where T : CLASE_BASE { try { if (cliente == null) { throw new Exception("Es necesario abrir la conexión antes."); } DataTable dt = cliente.EjecutarSelect(query); if (dt.Rows.Count > 0) { T obj = mapeoSelect.ConvertirAObjeto <T>(dt.Rows[0]); return(obj); } else { return(default(T)); } } catch (Exception ex) { throw ex; } }