/// <summary> /// Добавить новый эпизод /// </summary> public void AddEpisode() { if (CanAddEpisode is false) { return; } using (var ctx = new CVDbContext(AppDataPath)) { var cartoon = ctx.Cartoons .Include(c => c.CartoonVoiceOvers) .First(c => c.CartoonId == GlobalIdList.CartoonId); if (cartoon.CartoonVoiceOvers.Count == 0) { WinMan.ShowDialog(new DialogViewModel( "У выбранного мультсериала отсутствуют озвучки, добавьте одну или более для создания нового эпизода", DialogType.INFO)); return; } // загрузка первой озвучки выбранного м/с CartoonVoiceOver voiceOver; if (DefaultVoiceOver == null) { voiceOver = ctx.Cartoons .Include(ce => ce.CartoonVoiceOvers) .First(c => c.CartoonId == GlobalIdList.CartoonId).CartoonVoiceOvers.First(); } else { voiceOver = ctx.VoiceOvers .First(vo => vo.CartoonVoiceOverId == DefaultVoiceOver.CartoonVoiceOverId); } var episode = CreateNewEpisode(ctx, voiceOver); CreateNewEpisodeOption(ctx, episode, voiceOver); episode = ctx.CartoonEpisodes.ToList().Last(); Episodes.Add(episode); NotifyOfPropertyChange(() => Episodes); } SelectedEpisode = Episodes.LastOrDefault(); EpisodeIndexes.CurrentIndex = Episodes.IndexOf(SelectedEpisode); EpisodeIndexes.EndIndex = Episodes.IndexOf(SelectedEpisode); NotifyOfPropertyChange(() => CanEditNextEpisode); NotifyOfPropertyChange(() => CanEditPreviousEpisode); }
/// <summary> /// Добавить новый джампер в БД /// </summary> /// <param name="jumper">добавляемый джампер</param> private void AddJumperToDb(Jumper jumper) { using (var ctx = new CVDbContext(AppDataPath)) { ctx.EpisodeOptions .First(eo => eo.EpisodeOptionId == SelectedEpisodeOption .EpisodeOptionId).Duration = CalculatingDuration(); ctx.Jumpers.Add(jumper); ctx.SaveChanges(); Jumpers.Last().JumperId = ctx.Jumpers.ToList().Last().JumperId; NotifyOfPropertyChange(() => Jumpers); } }
/// <summary> /// Загрузка из БД списка сезонов /// </summary> private void LoadSeasonList() { BindableCollection <CartoonSeason> seasons; using (var ctx = new CVDbContext(SettingsHelper.AppDataPath)) { ctx.CartoonSeasons .Where(cs => cs.CartoonId == SettingsHelper.GlobalIdList.CartoonId) .Load(); seasons = new BindableCollection <CartoonSeason>(ctx.CartoonSeasons.Local); } Seasons = new BindableCollection <CartoonSeason>(seasons); }
/// <summary> /// Загрузка данных сезона /// </summary> private void LoadSeasonData() { List <CartoonEpisode> episodes; using (var ctx = new CVDbContext(AppDataPath)) { episodes = ctx.CartoonEpisodes .Include(ce => ce.EpisodeVoiceOvers) .Where(ce => ce.CartoonSeasonId == GlobalIdList.SeasonId).ToList(); } Episodes = new BindableCollection <CartoonEpisode>(episodes); SelectedEpisode = Episodes.FirstOrDefault(); }
/// <summary> /// Загрузка списка озвучек выбранного эпизода из БД /// </summary> private void LoadEpisodeVoiceOverList() { BindableCollection <CartoonVoiceOver> voiceOvers; using (var ctx = new CVDbContext(Helpers.SettingsHelper.AppDataPath)) { ctx.VoiceOvers .Where(vo => vo.CartoonEpisodes .Any(ce => ce.CartoonEpisodeId == IdList.EpisodeId)) .Load(); voiceOvers = new BindableCollection <CartoonVoiceOver>(ctx.VoiceOvers.Local); } EpisodeVoiceOvers = new BindableCollection <CartoonVoiceOver>(voiceOvers); }
/// <summary> /// Обновить список озвучек м/с /// </summary> public void UpdateCartoonVoiceOvers() { if (GlobalIdList.CartoonId == 0) { return; } using (var ctx = new CVDbContext(AppDataPath)) { var voiceOvers = ctx.VoiceOvers .Where(vo => vo.Cartoons.Any(c => c.CartoonId == GlobalIdList.CartoonId)); CartoonVoiceOvers = new BindableCollection <CartoonVoiceOver>(voiceOvers); } }
/// <summary> /// Удалить выбранную озвучку текущего эпизода из БД /// </summary> private void RemoveSelectedEpisodeVoiceOverFromDb() { using (var ctx = new CVDbContext(Helpers.SettingsHelper.AppDataPath)) { var episode = ctx.CartoonEpisodes .Include(ce => ce.EpisodeVoiceOvers) .Single(ce => ce.CartoonEpisodeId == IdList.EpisodeId); ctx.VoiceOvers .Include(vo => vo.CartoonEpisodes) .Single(vo => vo.CartoonVoiceOverId == SelectedVoiceOverId) .CartoonEpisodes.Remove(episode); ctx.SaveChanges(); } }
/// <summary> /// Загрузка из базы данны списка сезонов выбранного мультсериала /// </summary> private void LoadSeasonList() { BindableCollection <CartoonSeason> seasons; using (var ctx = new CVDbContext(Helpers.SettingsHelper.AppDataPath)) { seasons = new BindableCollection <CartoonSeason>(ctx.CartoonSeasons .Where(cs => cs.CartoonId == IdList.CartoonId)); } Seasons = new BindableCollection <CartoonSeason>(seasons); SeasonIndexes.EndIndex = Seasons.Count - 1; NotifyOfPropertyChange(() => CanSelectNextSeason); NotifyOfPropertyChange(() => CanSelectPreviousSeason); }
/// <summary> /// Удалить выбранный эпизод из БД /// </summary> private void RemoveEpisodeFromDb() { using (var ctx = new CVDbContext(AppDataPath)) { var episode = ctx.CartoonEpisodes .FirstOrDefault(ce => ce.CartoonEpisodeId == GlobalIdList.EpisodeId); if (episode == null) { throw new Exception("Удаляемый эпизод не найден"); } ctx.CartoonEpisodes.Remove(episode); ctx.SaveChanges(); } }
/// <summary> /// Загрузка из базы данных списка мультсериалов по ID сайта /// </summary> private void LoadCartoonList() { BindableCollection <Cartoon> cartoons; using (var ctx = new CVDbContext(Helpers.SettingsHelper.AppDataPath)) { cartoons = new BindableCollection <Cartoon>(ctx.Cartoons .Where(c => c.CartoonWebSites .Any(cws => cws.CartoonWebSiteId == IdList.WebSiteId))); } Cartoons = new BindableCollection <Cartoon>(cartoons); CartoonIndexes.EndIndex = Cartoons.Count - 1; NotifyOfPropertyChange(() => CanSelectNextCartoon); NotifyOfPropertyChange(() => CanSelectPreviousCartoon); }
/// <summary> /// Загрузка из базы данных списка эпизодов выбранного сезона /// </summary> private void LoadEpisodeList() { BindableCollection <CartoonEpisode> episodes; using (var ctx = new CVDbContext(Helpers.SettingsHelper.AppDataPath)) { episodes = new BindableCollection <CartoonEpisode>(ctx.CartoonEpisodes .Where(ce => ce.CartoonSeasonId == IdList.SeasonId) .ToList()); } Episodes = new BindableCollection <CartoonEpisode>(episodes); EpisodeIndexes.EndIndex = Episodes.Count - 1; NotifyOfPropertyChange(() => CanSelectNextEpisode); NotifyOfPropertyChange(() => CanSelectPreviousEpisode); }
private void SaveEpisodeOptionChanges(CVDbContext ctx) { var option = ctx.EpisodeOptions .Include(eo => eo.Jumpers) .First(eo => eo.EpisodeOptionId == SelectedEpisodeOption.EpisodeOptionId); SelectedEpisodeOption.Duration = EpisodeDuration; if (IsEquals(option, SelectedEpisodeOption) is false) { option.Duration = SelectedEpisodeOption.Duration; option.CreditsStart = SelectedEpisodeOption.CreditsStart; ctx.Entry(option).State = EntityState.Modified; ctx.SaveChanges(); } }
/// <summary> /// Удалить выбранный джампер из БД /// </summary> private void RemoveJumperFromDb() { using (var ctx = new CVDbContext(AppDataPath)) { var jumper = ctx.Jumpers.First(j => j.JumperId == SelectedJumper.JumperId); ctx.Jumpers.Remove(jumper); ctx.SaveChanges(); SelectedEpisodeOption.Jumpers.Remove(SelectedJumper); Jumpers.Remove(SelectedJumper); ctx.EpisodeOptions .First(eo => eo.EpisodeOptionId == SelectedEpisodeOption .EpisodeOptionId).Duration = CalculatingDuration(); ctx.SaveChanges(); } }
public void UpdateVoiceOverList() { if (SettingsHelper.GlobalIdList.CartoonId == 0) { return; } Cartoon cartoon; using (var ctx = new CVDbContext(SettingsHelper.AppDataPath)) { cartoon = ctx.Cartoons .Include(c => c.CartoonVoiceOvers) .Single(c => c.CartoonId == SettingsHelper.GlobalIdList.CartoonId); } VoiceOvers = new BindableCollection <CartoonVoiceOver>(cartoon.CartoonVoiceOvers); }
private void LoadData() { using (var ctx = new CVDbContext(AppDataPath)) { GeneralSettings = LoadGeneralSettings(); var episodes = ctx.CartoonEpisodes .Include(ce => ce.CartoonVoiceOver) .Include(ce => ce.CartoonSeason) .Include(ce => ce.EpisodeOptions) .Include(ce => ce.Cartoon) .ToList(); var cartoons = ctx.Cartoons .Include(c => c.CartoonEpisodes) .Where(c => c.CartoonEpisodes.Count > 0).ToList(); Cartoons = new BindableCollection <Cartoon>(cartoons) { new Cartoon { Name = "всех" } }; Episodes = new BindableCollection <CartoonEpisode>(episodes); GeneralSettings.AvailableEpisodesCount = ctx.CartoonEpisodes .Include(ce => ce.CartoonVoiceOver) .Include(ce => ce.CartoonSeason) .Include(ce => ce.EpisodeOptions) .Include(ce => ce.Cartoon) .Where(ce => ce.Cartoon.Checked && ce.CartoonSeason.Checked) .ToList().Count; WriteClassInFile(GeneralSettings, DefaultGeneralSettingsFileName, GeneralSettingsFileExtension, AppDataPath); GeneralSettings = LoadGeneralSettings(); TempGeneralSettings = CloneObject <GeneralSettingsValue>(GeneralSettings); NotifyOfPropertyChange(() => GeneralSettings); NotifyOfPropertyChange(() => CanSaveChanges); NotifyOfPropertyChange(() => CanCancelChanges); } }
/// <summary> /// Сохранить изменения /// </summary> public void SaveChanges() { if (CanSaveChanges is false) { return; } if (SelectedVoiceOverId == 0) { throw new Exception("Id выбраной озвучки м/ф равен 0"); } using (var ctx = new CVDbContext(AppDataPath)) { var voiceOver = ctx.VoiceOvers.Find(SelectedVoiceOverId); var options = ctx.EpisodeOptions.Where(eo => eo.CartoonVoiceOverId == EditedVoiceOver.CartoonVoiceOverId); if (voiceOver.Name != EditedVoiceOver.Name) { foreach (var option in options) { option.Name = $"{EditedVoiceOver.Name}_Option"; ctx.Entry(option).State = EntityState.Modified; } } CopyChanges(ref voiceOver, EditedVoiceOver); ctx.Entry(voiceOver).State = EntityState.Modified; ctx.SaveChanges(); } TempEditedVoiceOver = CloneObject <CartoonVoiceOver>(EditedVoiceOver); NotifyChanges(); IsNotEditing = true; UpdateVoiceOverList(); NotifyChanges(); }
///// <summary> ///// Измене выбор обмениваемого джампера ///// </summary> //public void SwappingJumperSelectionChanged() //{ // NotifyOfPropertyChange(() => CanDisableSwapping); // NotifyOfPropertyChange(() => CanSwapJumpers); //} ///// <summary> ///// Включить режим обмена местами джамперов ///// </summary> //public void EnableSwapping() //{ // IsJumperSwapping = true; // NotifyOfPropertyChange(() => CanEnableSwapping); // NotifyOfPropertyChange(() => CanDisableSwapping); //} //public bool CanEnableSwapping => IsJumperSwapping is false; ///// <summary> ///// Поменять местами джампер ///// </summary> //public void SwapJumpers() //{ // if (CanSwapJumpers is false) return; // Jumper temp; // using (var ctx = new CVDbContext(AppDataPath)) // { // var selJumper = ctx.Jumpers.Find(SelectedJumper.JumperId); // var swapJumper = ctx.Jumpers.Find(SwappingJumper.JumperId); // if (selJumper == null || // swapJumper == null) // { // throw new Exception("Джампер не найден"); // } // temp = CloneObject<Jumper>(selJumper); // selJumper.StartTime = swapJumper.StartTime; // selJumper.SkipCount = swapJumper.SkipCount; // swapJumper.StartTime = temp.StartTime; // swapJumper.SkipCount = temp.SkipCount; // ctx.SaveChanges(); // } // temp = CloneObject<Jumper>(SelectedJumper); // SelectedJumper = CloneObject<Jumper>(SwappingJumper); // SwappingJumper = CloneObject<Jumper>(temp); // NotifyOfPropertyChange(() => CanSwapJumpers); // NotifyOfPropertyChange(() => Jumpers); //} //public bool CanSwapJumpers //{ // get // { // if (SelectedJumper == null || // SwappingJumper == null) // { // return false; // } // if (SelectedJumper.JumperId == SwappingJumper.JumperId || // SelectedJumper.EndTime >= SwappingJumper.StartTime) // { // return false; // } // return true; // } //} ///// <summary> ///// Выключить режим обмена местами джамперов ///// </summary> //public void DisableSwapping() //{ // IsJumperSwapping = false; // NotifyOfPropertyChange(() => CanEnableSwapping); // NotifyOfPropertyChange(() => CanDisableSwapping); //} //public bool CanDisableSwapping => IsJumperSwapping; #endregion #region Changes actions /// <summary> /// Сохранение данных /// </summary> public void SaveChanges() { if (CanSaveChanges is false) { return; } using (var ctx = new CVDbContext(AppDataPath)) { SaveEpisodeChanges(ctx); SaveJumpersChanges(ctx); SaveEpisodeOptionChanges(ctx); } TempEpisodeSnapshot = JsonConvert.SerializeObject(EditableEpisode); TempEpisodeOptionSnapshot = JsonConvert.SerializeObject(SelectedEpisodeOption); NotifyEditingProperties(); }
/// <summary> /// Сохранение изменений джамперов /// </summary> /// <param name="ctx"></param> private void SaveJumpersChanges(CVDbContext ctx) { var tempOption = JsonConvert.DeserializeObject <EpisodeOption>(TempEpisodeOptionSnapshot); var jumpers = ctx.Jumpers.Where(j => j.EpisodeOptionId == tempOption.EpisodeOptionId).ToList(); for (var i = 0; i < Jumpers.Count; i++) { if (IsEquals(jumpers[i], Jumpers[i]) is false) { jumpers[i].SkipCount = Jumpers[i].SkipCount; jumpers[i].StartTime = Jumpers[i].StartTime; SelectedEpisodeOption.Jumpers[i] = Jumpers[i]; ctx.Entry(jumpers[i]).State = EntityState.Modified; ctx.SaveChanges(); } } ctx.SaveChanges(); }
/// <summary> /// Создать новую озвучку в БД /// </summary> /// <returns></returns> private CartoonVoiceOver CreateNewVoiceOver() { using (var ctx = new CVDbContext(Helpers.SettingsHelper.AppDataPath)) { var count = ctx.VoiceOvers.Max(vo => vo.CartoonVoiceOverId) + 1; var newVoiceOver = new CartoonVoiceOver { Name = $"Озвучка_{count}", UrlParameter = "", Description = $"Описание озвучки_{count}" }; ctx.VoiceOvers.Add(newVoiceOver); ctx.SaveChanges(); var id = ctx.VoiceOvers.ToList().Last().CartoonVoiceOverId; return(ctx.VoiceOvers.Find(id)); } }
private void LoadData() { Cartoon result; using (var ctx = new CVDbContext(SettingsHelper.AppDataPath)) { result = ctx.Cartoons .Include(c => c.CartoonUrls) .Include(c => c.CartoonSeasons) .Include(c => c.CartoonVoiceOvers) .Single(c => c.CartoonId == SettingsHelper.GlobalIdList.CartoonId); } SelectedCartoon = CloneObject <Cartoon>(result); SelectedCartoonUrl = SelectedCartoon.CartoonUrls.First(); TempCartoonSnapshot = JsonConvert.SerializeObject(SelectedCartoon); Seasons = new BindableCollection <CartoonSeason>(result.CartoonSeasons); VoiceOvers = new BindableCollection <CartoonVoiceOver>(result.CartoonVoiceOvers); SelectedSeason = Seasons.FirstOrDefault(); }
/// <summary> /// Загрузка из БД списка мультсериалов /// </summary> private void LoadCartoonList() { BindableCollection <Cartoon> cartoons; using (var ctx = new CVDbContext(SettingsHelper.AppDataPath)) { ctx.Cartoons .Where(c => c.CartoonWebSites .Any(cws => cws.CartoonWebSiteId == SettingsHelper.GlobalIdList.WebSiteId)) .Load(); cartoons = new BindableCollection <Cartoon>(ctx.Cartoons.Local); } Cartoons = new BindableCollection <Cartoon>(cartoons) { new Cartoon { Name = SettingsHelper.NewElementString } }; }
/// <summary> /// Копировать выбранную глобальную озвучку в текущий м/ф /// </summary> public void MoveToCartoonVoiceOvers() { if (CanMoveToCartoonVoiceOvers is false) { return; } if (SelectedVoiceOverId == 0) { throw new Exception("Id выбраной озвучки м/ф равен 0"); } if (CartoonVoiceOvers.Any(cvo => cvo.CartoonVoiceOverId == SelectedVoiceOverId)) { SelectedCartoonVoiceOver = CartoonVoiceOvers .First(cvo => cvo.CartoonVoiceOverId == SelectedVoiceOverId); return; } using (var ctx = new CVDbContext(AppDataPath)) { var cartoon = ctx.Cartoons .Include(c => c.CartoonVoiceOvers) .Single(c => c.CartoonId == IdList.CartoonId); ctx.VoiceOvers .Include(vo => vo.Cartoons) .Single(vo => vo.CartoonVoiceOverId == SelectedVoiceOverId) .Cartoons.Add(cartoon); ctx.SaveChanges(); } var voiceOver = GlobalVoiceOvers.First(vo => vo.CartoonVoiceOverId == SelectedVoiceOverId); CartoonVoiceOvers.Add(voiceOver); NotifyOfPropertyChange(() => EpisodeVoiceOvers); SelectedCartoonVoiceOver = voiceOver; NotifyOfPropertyChange(() => SelectedCartoonVoiceOver); }
/// <summary> /// Удалить выбраный м/с /// </summary> public void RemoveCartoon() { var dvm = new DialogViewModel(null, DialogType.REMOVE_OBJECT); WinMan.ShowDialog(dvm); switch (dvm.DialogResult) { case DialogResult.YES_ACTION: break; case DialogResult.NO_ACTION: return; default: return; } using (var ctx = new CVDbContext(AppDataPath)) { var cartoon = ctx.Cartoons.Find(GlobalIdList.CartoonId); if (cartoon != null) { ctx.Cartoons.Remove(cartoon); } var voiceOverForRemove = ctx.VoiceOvers .Where(vo => vo.Cartoons.Count == 1) .Where(vo => vo.Cartoons .Any(c => c.CartoonId == GlobalIdList.CartoonId)); ctx.VoiceOvers.RemoveRange(voiceOverForRemove); ctx.SaveChanges(); } var parent = ((CartoonsEditorViewModel)Parent); parent.Cartoons.Remove(parent.SelectedCartoon); }
/// <summary> /// Сохранить изменения /// </summary> public void SaveChanges() { if (CanSaveChanges is false) { return; } using (var ctx = new CVDbContext(AppDataPath)) { var cartoon = ctx.Cartoons .Include(c => c.CartoonUrls) .Single(c => c.CartoonId == GlobalIdList.CartoonId); cartoon.Name = SelectedCartoon.Name; cartoon.Description = SelectedCartoon.Description; cartoon.CartoonUrls .Single(cu => cu.CartoonUrlId == SelectedCartoonUrl.CartoonUrlId).Url = SelectedCartoonUrl.Url; ctx.Entry(cartoon).State = EntityState.Modified; ctx.SaveChanges(); } TempCartoonSnapshot = JsonConvert.SerializeObject(SelectedCartoon); NotifyOfPropertyChange(() => CanSaveChanges); NotifyOfPropertyChange(() => HasChanges); var parent = (CartoonsEditorViewModel)Parent; if (parent == null) { return; } parent.SelectedCartoon.Name = SelectedCartoon.Name; parent.NotifyOfPropertyChange(() => parent.SelectedCartoon); parent.NotifyOfPropertyChange(() => parent.Cartoons); }
/// <summary> /// Загрузка данных выбранного эпизода для редактирования /// </summary> /// <returns></returns> private bool LoadSelectedEpisodeData() { using (var ctx = new CVDbContext(AppDataPath)) { var episode = ctx.CartoonEpisodes .Include(ce => ce.EpisodeVoiceOvers) .First(ce => ce.CartoonEpisodeId == GlobalIdList.EpisodeId); if (episode.EpisodeVoiceOvers.Count == 0) { WinMan.ShowDialog(new DialogViewModel( "У выбранного эпизода отсутствуют озвучки, добавьте одну или более для продолжения редактирования", DialogType.INFO)); return(false); } var voiceOvers = ctx.VoiceOvers .Include(vo => vo.CartoonEpisodes) .Include(vo => vo.CheckedEpisodes) .Where(vo => vo.CartoonEpisodes .Any(ce => ce.CartoonEpisodeId == GlobalIdList.EpisodeId)); foreach (var vo in voiceOvers) { vo.SelectedEpisodeId = episode.CartoonEpisodeId; } var options = ctx.EpisodeOptions .Include(eo => eo.Jumpers) .Where(eo => eo.CartoonEpisodeId == GlobalIdList.EpisodeId); EditableEpisode = CloneObject <CartoonEpisode>(episode); VoiceOvers = new BindableCollection <CartoonVoiceOver>(voiceOvers); EpisodeOptions = new BindableCollection <EpisodeOption>(options); return(true); } }
/// <summary> /// Удалить выбранный сезон /// </summary> public void RemoveSeason() { if (CanRemoveSeason is false) { return; } using (var ctx = new CVDbContext(AppDataPath)) { var temp = ctx.CartoonSeasons.Find(SelectedSeason.CartoonSeasonId); ctx.Entry(temp).State = EntityState.Deleted; ctx.SaveChanges(); } var tempList = ((CartoonsEditorViewModel)Parent).Seasons; ((CartoonsEditorViewModel)Parent) .Seasons.Remove(tempList.First(s => s.CartoonSeasonId == SelectedSeason.CartoonSeasonId)); Seasons.Remove(SelectedSeason); NotifyOfPropertyChange(() => Seasons); SelectedSeason = Seasons.Count > 0 ? Seasons.Last() : null; }
/// <summary> /// Обновить список озвучек /// </summary> public void UpdateVoiceOverList() { if (GlobalIdList.CartoonId == 0) { return; } if (IsNotEditing) { UpdateCartoonVoiceOvers(); } if (GlobalIdList.EpisodeId == 0) { return; } CartoonEpisode episode; using (var ctx = new CVDbContext(AppDataPath)) { episode = ctx.CartoonEpisodes .Include(e => e.EpisodeVoiceOvers) .Single(e => e.CartoonEpisodeId == GlobalIdList.EpisodeId); } foreach (var vo in episode.EpisodeVoiceOvers) { vo.SelectedEpisodeId = episode.CartoonEpisodeId; } VoiceOvers = new BindableCollection <CartoonVoiceOver>(episode.EpisodeVoiceOvers); NotifyOfPropertyChange(() => CanEditPreviousEpisode); NotifyOfPropertyChange(() => CanEditNextEpisode); }
public StudiesController(CVDbContext context) { _context = context; }
public PortfolioController(CVDbContext db) { this.db = db; }
/// <summary> /// Импорт настроек опции /// </summary> public void ImportOptionData() { if (CanImportOptionData is false) { return; } using (var ctx = new CVDbContext(AppDataPath)) { var option = ctx.EpisodeOptions .Include(eo => eo.Jumpers) .First(eo => eo.EpisodeOptionId == SelectedEpisodeOption.EpisodeOptionId); if (option == null) { throw new Exception("Опция не существует"); } foreach (var jumper in option.Jumpers.ToList()) { ctx.Jumpers.Remove(jumper); ctx.SaveChanges(); } Jumpers.Clear(); SelectedEpisodeOption.Jumpers.Clear(); var count = 1; foreach (var j in ImportingEpisodeOption.Jumpers) { var jumper = new Jumper { EpisodeOptionId = SelectedEpisodeOption.EpisodeOptionId, StartTime = j.StartTime, SkipCount = j.SkipCount, Number = count++ }; option.Jumpers.Add(jumper); ctx.SaveChanges(); jumper = ctx.Jumpers.ToList().Last(); Jumpers.Add(jumper); SelectedEpisodeOption.Jumpers.Add(jumper); } option.CreditsStart = ImportingEpisodeOption.CreditsStart; SelectedEpisodeOption.CreditsStart = ImportingEpisodeOption.CreditsStart; option.Duration = CalculatingDuration(option); SelectedEpisodeOption.Duration = CalculatingDuration(option); SelectedJumper = Jumpers.First(); EditableEpisodeTime = ConvertToEpisodeTime(SelectedEpisodeOption, SelectedJumper); ctx.SaveChanges(); TempEpisodeOptionSnapshot = JsonConvert.SerializeObject(SelectedEpisodeOption); NotifyOfPropertyChange(() => SelectedEpisodeOption); NotifyOfPropertyChange(() => Jumpers); NotifyOfPropertyChange(() => CanImportOptionData); NotifyEditingButtons(); NotifyTimeProperties(); } }