public async Task <ActionResult <DogBreedItem> > DeleteSubBreedByID(long id, long subBreedId) { DogSubBreed subBreedToDelete = new DogSubBreed(); try { var parentBreed = await dataContext.DogBreedItemList.FirstAsync(breed => breed.DogBreedItemId == id); subBreedToDelete = dataContext.DogSubBreedItemList.First(subbreed => subbreed.ParentBreedId == parentBreed.DogBreedItemId && subbreed.DogSubBreedId == subBreedId); dataContext.DogSubBreedItemList.Remove(subBreedToDelete); await dataContext.SaveChangesAsync(); return(Ok(subBreedToDelete)); } catch { return(NotFound()); } }
public async Task <ActionResult <DogSubBreed> > PostSubBreed(long parentBreedId, long subBreedId, DogSubBreed dogSubBreed) { dogSubBreed.ParentBreedId = parentBreedId; DogBreedItem parentBreed; try { parentBreed = dataContext.DogBreedItemList.Include(breed => breed.SubBreeds).First(x => x.DogBreedItemId == parentBreedId); } catch { return(UnprocessableEntity("\"Error\" : \"Parent breed does not exist.\"")); } try { if (parentBreed.SubBreeds.Exists(x => x.DogSubBreedId == dogSubBreed.DogSubBreedId)) { return(UnprocessableEntity("\"Error\" : \"A dog with that subbreed Id already exists.\"")); } if (parentBreed.SubBreeds.Exists(x => x.SubBreedName == dogSubBreed.SubBreedName)) { return(UnprocessableEntity("\"Error\" : \"A breed can not contain two sub-breeds with the same name. Same sub-breed names are fine within seperate breed objects.\"")); } dataContext.DogSubBreedItemList.Add(dogSubBreed); await dataContext.SaveChangesAsync(); DogSubBreed createdSubBreed = await dataContext.DogSubBreedItemList.Where(x => x.SubBreedName == dogSubBreed.SubBreedName).FirstAsync(x => x.ParentBreedId == parentBreedId); dataContext.DogBreedItemList.Find(parentBreed.DogBreedItemId).SubBreeds.Add(createdSubBreed); await dataContext.SaveChangesAsync(); return(Created($"api/dogbreed/{parentBreedId}/subbreed/{createdSubBreed.DogSubBreedId}", createdSubBreed)); } catch { return(BadRequest()); } }
/// <summary> /// Creates all sub-breeds and saves them in the context handed to it. /// </summary> /// <param name="dogSubbreedArray"></param> /// <param name="parentBreedId">Id of the breed this sub breed belongs to</param> /// <param name="dataContext">Data context we are adding the dog to</param> public static void PopulateDbContextWithNewDogBreedSubbreeds(string[] dogSubbreedArray, long parentBreedId, DogBreedContext dataContext) { DogBreedItem parentBreed = dataContext.DogBreedItemList.Find(parentBreedId); foreach (string subBreedName in dogSubbreedArray) { DogSubBreed subBreed = new DogSubBreed() { ParentBreedId = parentBreedId, SubBreedName = subBreedName }; dataContext.DogSubBreedItemList.Add(subBreed); } //Now save DB context so that we can retreive them with a generated ID. dataContext.SaveChanges(); //Build a list of all sub breeds where the sub-subbreed's parent ID is the parent Id we're looking for. List <DogSubBreed> subBreeds = dataContext.DogSubBreedItemList.Where(x => x.ParentBreedId == parentBreedId).ToList(); //set it in the context using our reference dataContext.DogBreedItemList.Find(parentBreedId).SubBreeds = subBreeds; dataContext.SaveChanges(); }