コード例 #1
0
        public async Task <IActionResult> Add(AddDestinationViewModel model)
        {
            if (!string.IsNullOrWhiteSpace(model.Name) && await destinationService.ExistsAsync(model.Name))
            {
                ModelState.AddModelError(nameof(model.Name),
                                         "Destination with the same name already exists.");
            }

            var invalidIds = await tagService.CheckForInvalidTagIds(model.SelectedTags);

            if (invalidIds.Any())
            {
                ModelState.AddModelError(nameof(model.SelectedTags),
                                         $"Non-existing tags were selected. (Count: {invalidIds.Count})");
            }

            if (!await regionService.ExistsAsync(model.RegionId))
            {
                ModelState.AddModelError(nameof(model.RegionId), "Selected region does not exist.");
            }

            if (!ModelState.IsValid)
            {
                model.Tags = await GetTags();

                model.Regions = await GetRegions();

                return(View(model));
            }

            await destinationService.AddAsync(model.Name, model.RegionId, model.SelectedTags);

            return(RedirectToAction(nameof(Add)));
        }
コード例 #2
0
        public async Task <int> AddAsync(string name, int regionId, IList <int> tags)
        {
            var invalidTags = await tagService.CheckForInvalidTagIds(tags);

            if (await ExistsAsync(name) ||
                !await regionService.ExistsAsync(regionId) ||
                invalidTags.Any())
            {
                return(0);
            }

            var destination = new Destination
            {
                Name     = name,
                RegionId = regionId
            };

            await database.Destinations.AddAsync(destination);

            await database.SaveChangesAsync();

            if (tags != null && tags.Any())
            {
                foreach (var tagId in tags.Distinct())
                {
                    if (!await database.DestinationTags.AnyAsync(d => d.DestinationId == destination.Id && d.TagId == tagId))
                    {
                        await database.DestinationTags.AddAsync(new DestinationTag
                        {
                            DestinationId = destination.Id,
                            TagId         = tagId
                        });
                    }
                }
            }
            await database.SaveChangesAsync();

            return(destination.Id);
        }