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