private void Add(TrackableEntity entity)
        {
            if (entity == null)
            {
                return;
            }

            this.items.Add(entity);
        }
        // All possible combinations here!
        // Insert --> Update
        //        --> Delete
        //
        // Update --> Delete
        // Update --> Update
        //
        // Some magic here!!
        public void ProcessEntity <T>(object entity, TrackableEntity.Operation operation) where T : class
        {
            if (entity == null)
            {
                return;
            }
            if (operation == TrackableEntity.Operation.Unknown)
            {
                return;
            }

            Type classType  = typeof(T);
            Type entityType = entity.GetType();

            // Paranoic!
            if (!classType.Equals(entityType))
            {
                return;
            }
            bool contains = this.Contains(entity);

            if (!contains)
            {
                this.items.Add(new TrackableEntity(entity, operation));

                return;
            }

            var rst = this.items.Where(x => x.CompareTo(entity)).ToList();

            if (rst == null)
            {
                return;
            }
            if (rst.Count != 1)
            {
                return;
            }

            TrackableEntity thisEntity = rst[0] as TrackableEntity;

            if (operation == TrackableEntity.Operation.Delete)
            {
                if (thisEntity.OperationType == TrackableEntity.Operation.Insert)
                {
                    this.items.Remove(thisEntity);

                    return;
                }
                if (thisEntity.OperationType == TrackableEntity.Operation.Update)
                {
                    this.items.Remove(thisEntity);

                    this.items.Add(new TrackableEntity(entity, operation));

                    return;
                }
            }
            if (operation == TrackableEntity.Operation.Update)
            {
                if (thisEntity.OperationType == TrackableEntity.Operation.Insert)
                {
                    this.items.Remove(thisEntity);

                    this.items.Add(new TrackableEntity(entity, TrackableEntity.Operation.Insert));

                    return;
                }
                if (thisEntity.OperationType == TrackableEntity.Operation.Update)
                {
                    this.items.Remove(thisEntity);

                    this.items.Add(new TrackableEntity(entity, operation));

                    return;
                }
            }
        }