コード例 #1
0
        /// <summary>
        /// Creates a new relation.
        /// </summary>
        public async Task CreateAsync(RelationEditorVM vm, ClaimsPrincipal principal)
        {
            await ValidateRequestAsync(vm, isNew : true);

            var rels       = new List <Relation>();
            var changesets = new List <Changeset>();
            var groupId    = vm.SourceIds.Length > 1 ? Guid.NewGuid() : (Guid?)null;

            var user = await GetUserAsync(principal);

            foreach (var srcId in vm.SourceIds)
            {
                var rel = _mapper.Map <Relation>(vm);
                rel.Id       = Guid.NewGuid();
                rel.SourceId = srcId;

                var compRel = new Relation {
                    Id = Guid.NewGuid()
                };
                MapComplementaryRelation(rel, compRel);

                rels.Add(rel);
                rels.Add(compRel);

                changesets.Add(GetChangeset(null, _mapper.Map <RelationEditorVM>(rel), rel.Id, user, null, groupId));
            }

            await _validator.ValidateAsync(rels);

            _db.Changes.AddRange(changesets);
            _db.Relations.AddRange(rels);

            _cache.Clear();
        }
コード例 #2
0
        /// <summary>
        /// Creates a new relation.
        /// </summary>
        public async Task CreateAsync(RelationEditorVM vm, ClaimsPrincipal principal)
        {
            await ValidateRequestAsync(vm, isNew : true);

            var newRels     = new List <Relation>();
            var updatedRels = new List <Relation>();
            var groupId     = vm.SourceIds.Length > 1 ? Guid.NewGuid() : (Guid?)null;

            var removedRelations = await _db.Relations
                                   .Where(x => vm.SourceIds.Contains(x.SourceId) &&
                                          x.DestinationId == vm.DestinationId &&
                                          x.Type == vm.Type &&
                                          x.Id != vm.Id &&
                                          x.IsDeleted == true)
                                   .ToDictionaryAsync(x => x.SourceId, x => x);

            var user = await GetUserAsync(principal);

            foreach (var srcId in vm.SourceIds)
            {
                Relation rel;

                if (removedRelations.TryGetValue(srcId, out rel))
                {
                    rel.IsDeleted = false;

                    updatedRels.Add(rel);
                }
                else
                {
                    rel          = _mapper.Map <Relation>(vm);
                    rel.Id       = Guid.NewGuid();
                    rel.SourceId = srcId;

                    newRels.Add(rel);
                }

                var compRel = new Relation {
                    Id = Guid.NewGuid()
                };
                MapComplementaryRelation(rel, compRel);
                newRels.Add(compRel);

                _db.Changes.Add(GetChangeset(null, _mapper.Map <RelationEditorVM>(rel), rel.Id, user, null, groupId));
            }

            await _validator.ValidateAsync(newRels.Concat(updatedRels).ToList());

            _db.Relations.AddRange(newRels);

            _cache.Clear();
        }