/// <summary>
        /// Deletes a <see cref="Relation"/>
        /// </summary>
        /// <param name="relation">Relation to Delete</param>
        public void Delete(IRelation relation)
        {
            if (DeletingRelation.IsRaisedEventCancelled(new DeleteEventArgs <IRelation>(relation), this))
            {
                return;
            }

            var uow = UowProvider.GetUnitOfWork();

            using (var repository = RepositoryFactory.CreateRelationRepository(uow))
            {
                repository.Delete(relation);
                uow.Commit();
            }

            DeletedRelation.RaiseEvent(new DeleteEventArgs <IRelation>(relation, false), this);
        }
        /// <summary>
        /// Deletes all <see cref="Relation"/> objects based on the passed in <see cref="RelationType"/>
        /// </summary>
        /// <param name="relationType"><see cref="RelationType"/> to Delete Relations for</param>
        public void DeleteRelationsOfType(IRelationType relationType)
        {
            var relations = new List <IRelation>();
            var uow       = UowProvider.GetUnitOfWork();

            using (var repository = RepositoryFactory.CreateRelationRepository(uow))
            {
                var query = new Query <IRelation>().Where(x => x.RelationTypeId == relationType.Id);
                relations.AddRange(repository.GetByQuery(query).ToList());

                foreach (var relation in relations)
                {
                    repository.Delete(relation);
                }
                uow.Commit();
            }

            DeletedRelation.RaiseEvent(new DeleteEventArgs <IRelation>(relations, false), this);
        }