public static Response<Asiento> Delete(this Asiento request, Factory factory, IRequestContext requestContext, bool checkSucursal=true, bool checkPeriodo=false, Action<IDbCommand,Asiento> runBeforeDeleteDbCommandsFn=null, Action<IDbCommand,Asiento> runAfterDeleteDbCommandsFn=null) { request.CheckId(Operaciones.Destroy); var httpRequest = requestContext.Get<IHttpRequest>(); string lockKey=request.GetLockKey(); Action block=()=>{ factory.Delete(request,(dbCmd)=> { httpRequest.CacheClientExec(cache=> { var id = request.Id; var cacheKey=request.GetCacheKey(); request= cache.Get<Asiento>(cacheKey); if(request== default(Asiento)) { request= dbCmd.FirstOrDefault<Asiento>(q=> q.Id==id); AssertExists(request, id); } else { cache.Remove(cacheKey); } request.ValidateAndThrowHttpError(Operaciones.Destroy); if(checkSucursal) request.CheckSucursal(factory, httpRequest); if(checkPeriodo) request.CheckPeriodo(factory,httpRequest); if(runBeforeDeleteDbCommandsFn!=null) runBeforeDeleteDbCommandsFn(dbCmd, request); }); },(dbCmd)=> { if(runAfterDeleteDbCommandsFn!=null) runAfterDeleteDbCommandsFn(dbCmd,request); }); }; IRedisClientsManager cm = httpRequest.GetCacheClient() as IRedisClientsManager; try { if( cm != null) { cm.Exec(redisClient=> { using (redisClient.AcquireLock(lockKey, TimeSpan.FromSeconds(Definiciones.LockSeconds))) { block(); } }); } else block(); return new Response<Asiento>(){}; } catch(Exception e) { throw new HttpError(e.Message); } }