public async Task <ActionResult> Edit(Models.VM.TravelerProfileVM tpVM) { if (ModelState.IsValid) { try { TravelerProfile tp = await ProfileManager.LoadUserAndTravelerProfile(User); if (tp != null) { using (var db = new ApplicationDbContext()) { tp = await LoadProfile(tp.ID);//tp is the updated version TravelerProfile travelerDB = db.TravelerProfile.Find(tp.ID); var Attributes = await db.TravelerProfileAttributes.FindAsync(tp.TravelerAttributesID); var Description = await db.TravelerProfileDescription.FindAsync(tp.TravelerProfileDescriptionID); var ProfilePic = await db.Pictures.FindAsync(tp.Description.ProfilePic_ID); tp.SetValues(tpVM); //setting old values w/o picture //db.Entry(travelerDB).CurrentValues.SetValues(tp); tp.Attributes.ID = Attributes.ID; db.Entry(Attributes).CurrentValues.SetValues(tp.Attributes); if (ProfilePic != null) /// old picture exists ///Check tp here!! IDs { if (tpVM.DescriptionVM.upload != null) //new upload exists { //overwrite old Pic Picture newPic = ImageProcessing.ReadPicture(tpVM.DescriptionVM.upload); newPic.ID = ProfilePic.ID; //Setting id of old pic id tp.Description.ProfilePic_ID = newPic.ID; tp.Description.ProfilePic = newPic; db.Entry(ProfilePic).CurrentValues.SetValues(tp.Description.ProfilePic); db.Entry(Description).CurrentValues.SetValues(tp.Description); //kann denn raus } //do nothing with Pic tp.Description.ID = Description.ID; db.Entry(Description).CurrentValues.SetValues(tp.Description); } else //no old pic exists { if (tpVM.DescriptionVM.upload != null) //new upload exists { tp.Description.ProfilePic = ImageProcessing.ReadPicture(tpVM.DescriptionVM.upload); db.Pictures.Add(tp.Description.ProfilePic); tp.Description.ID = Description.ID; db.Entry(Description).CurrentValues.SetValues(tp.Description); } tp.Description.ID = Description.ID; db.Entry(Description).CurrentValues.SetValues(tp.Description); } await db.SaveChangesAsync(); } NotificationManager.AddNotification(NotificationType.Success, "Profile update successful"); return(RedirectToAction("Index", "Home")); } } catch (Exception e) { NotificationManager.AddException(e); } } return(View(tpVM)); }