public void Remove <T>([NotNull] T entity, [NotNull] string tagName) where T : class, IEntity { if (entity == null) { throw new ArgumentNullException(nameof(entity)); } using (var transaction = _unitOfWork.BeginTransaction()) { var tag = _tagProvider.Get(tagName); _tagEntityProvider.Remove(entity, tag); var entityLinkExists = _tagEntityProvider.Exists(tag); if (!entityLinkExists) { _tagProvider.Remove(tag); } transaction.Commit(); } }