public virtual void Attach(TEntity entity)
 {
     CheckAssert.NotNull(entity, nameof(entity));
     if (DbContext.Entry(entity).State == EntityState.Detached)
     {
         Entities.Attach(entity);
     }
 }
 public virtual async Task DeleteRangeAsync(IEnumerable <TEntity> entities, CancellationToken cancellationToken, bool saveNow = true)
 {
     CheckAssert.NotNull(entities, nameof(entities));
     Entities.RemoveRange(entities);
     if (saveNow)
     {
         await DbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
     }
 }
 public virtual async Task UpdateAsync(TEntity entity, CancellationToken cancellationToken, bool saveNow = true)
 {
     CheckAssert.NotNull(entity, nameof(entity));
     Entities.Update(entity);
     if (saveNow)
     {
         await DbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
     }
 }
 public virtual void DeleteRange(IEnumerable <TEntity> entities, bool saveNow = true)
 {
     CheckAssert.NotNull(entities, nameof(entities));
     Entities.RemoveRange(entities);
     if (saveNow)
     {
         DbContext.SaveChanges();
     }
 }
 public virtual void Delete(TEntity entity, bool saveNow = true)
 {
     CheckAssert.NotNull(entity, nameof(entity));
     Entities.Remove(entity);
     if (saveNow)
     {
         DbContext.SaveChanges();
     }
 }
        public virtual void Detach(TEntity entity)
        {
            CheckAssert.NotNull(entity, nameof(entity));
            var entry = DbContext.Entry(entity);

            if (entry != null)
            {
                entry.State = EntityState.Detached;
            }
        }