protected virtual void AntesDePersistirValidarRegistro(TRegistro registro, ParametrosDeNegocio parametros) { var negocio = NegociosDeSe.NegocioDeUnDtm(registro.GetType().FullName); if (!Contexto.DatosDeConexion.CreandoModelo && (!parametros.Parametros.ContainsKey(NegociosDeSe.ValidarSeguridad) || (bool)parametros.Parametros[NegociosDeSe.ValidarSeguridad])) { ValidarPermisosDePersistencia(parametros.Operacion, negocio, registro); } if ((parametros.Operacion == enumTipoOperacion.Insertar || parametros.Operacion == enumTipoOperacion.Modificar) && registro.ImplementaNombre()) { var propiedades = registro.PropiedadesDelObjeto(); foreach (var propiedad in propiedades) { if (propiedad.Name == nameof(INombre.Nombre)) { if (((string)propiedad.GetValue(registro)).IsNullOrEmpty()) { GestorDeErrores.Emitir($"El nombre del objeto {typeof(TRegistro).Name} es obligatorio"); } break; } } } if (parametros.Operacion == enumTipoOperacion.Modificar || parametros.Operacion == enumTipoOperacion.Eliminar) { } }
public TRegistro PersistirRegistro(TRegistro registro, ParametrosDeNegocio parametros) { if (parametros.Operacion != enumTipoOperacion.Insertar) { parametros.registroEnBd = LeerRegistroPorId(registro.Id, false, false, false, aplicarJoin: false); } var transaccion = Contexto.IniciarTransaccion(); try { AntesDePersistir(registro, parametros); if (parametros.Operacion == enumTipoOperacion.Insertar) { Contexto.Add(registro); } else if (parametros.Operacion == enumTipoOperacion.Modificar) { Contexto.Update(registro); } else if (parametros.Operacion == enumTipoOperacion.Eliminar) { Contexto.Remove(registro); } else { throw new Exception($"Solo se pueden persistir operaciones del tipo {enumTipoOperacion.Insertar} o {enumTipoOperacion.Modificar} o {enumTipoOperacion.Eliminar}"); } Contexto.SaveChanges(); if (Auditoria.ImplementaAuditoria(typeof(TRegistro))) { var negocio = NegociosDeSe.NegocioDeUnDtm(typeof(TRegistro).FullName); var auditar = parametros.Operacion == enumTipoOperacion.Modificar ? parametros.registroEnBd : registro; AuditoriaDeElementos.RegistrarAuditoria(Contexto, negocio, parametros.Operacion, (IElementoDtm)auditar); } DespuesDePersistir(registro, parametros); Contexto.Commit(transaccion); } catch (Exception) { Contexto.Rollback(transaccion); throw; } return(registro); }