/// <summary> /// Sets types for relations of expert. /// </summary> /// <param name="relationTuple">Plain object, that contains id of relation and flags of existence any relations.</param> /// <param name="expertName">Expert name.</param> /// <param name="sessionOfExperts">Session of experts.</param> public virtual void RelationTypes( [NotNull] RelationTupleDto relationTuple, [NotNull] string expertName, [NotNull] SessionOfExperts sessionOfExperts) { if (relationTuple == null) { throw new ArgumentNullException(nameof(relationTuple)); } if (expertName == null) { throw new ArgumentNullException(nameof(expertName)); } if (sessionOfExperts == null) { throw new ArgumentNullException(nameof(sessionOfExperts)); } var expert = GetExpertByNameAndSession(expertName, sessionOfExperts, ExpertFetch.Relations); IfExpertDoesNotExistThrow(expert, expertName, sessionOfExperts); var straightRelationTypes = new List <RelationType>(); var reverseRelationTypes = new List <RelationType>(); if (relationTuple.DoesRelationExist) { var generalType = _relationTypeRepository.GetGeneralType(); var taxonomyType = _relationTypeRepository.GetTaxonomyType(); var meronomyType = _relationTypeRepository.GetMeronomyType(); straightRelationTypes.Add(generalType); reverseRelationTypes.Add(generalType); if (relationTuple.IsStraightTaxonym) { straightRelationTypes.Add(taxonomyType); } if (relationTuple.IsStraightMeronym) { straightRelationTypes.Add(meronomyType); } if (relationTuple.IsReverseTaxonym) { reverseRelationTypes.Add(taxonomyType); } if (relationTuple.IsReverseMeronym) { reverseRelationTypes.Add(meronomyType); } } // ReSharper disable once PossibleNullReferenceException expert.SetTypesForRelation(relationTuple.StraightRelationId, straightRelationTypes, null); expert.SetTypesForRelation(relationTuple.ReverseRelationId, reverseRelationTypes, null); _expertRepository.AddOrUpdate(expert); }