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