public virtual T AddOrUpdate(T entity)
        {
            if (entity == null)
            {
                return(null);
            }

            var entry = _context.Entry(entity);

            switch (entry.State)
            {
            case EntityState.Detached:
                _context.Add(entity);
                break;

            case EntityState.Modified:
                _context.Update(entity);
                break;

            case EntityState.Added:
                _context.Add(entity);
                break;

            case EntityState.Unchanged:
                //item already in db no need to do anything
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(entity);
        }