public virtual void Refresh()
        {
            Guid[] downlist;
            if (DbSet.Count() == 0)
            {
                downlist = EntityContext.GetKeys(DateTime.MinValue);
            }
            else
            {
                downlist = EntityContext.GetKeys(DbSet.Max(t => t.UpdateTime));
            }
            foreach (var index in downlist)
            {
                if (IsCached(index))
                {
                    DbContext.Entry <TEntity>(EntityContext.GetEntity(index)).State = EntityState.Modified;
                }
                else
                {
                    DbSet.Add(EntityContext.GetEntity(index));
                }
            }
            var removelist = DbSet.Select(t => t.Index).ToList().Except(GetKeys());

            foreach (var index in removelist)
            {
                DbContext.Database.ExecuteSqlCommand("DELETE FROM " + TableName + " WHERE [BaseIndex] = {0}", index);
            }
            DbContext.SaveChanges();
        }