Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Страница Add / Edit сохраняет данные на клиенте при изменении без SaveChanges() - C#, WPF

sora Мастер (1628), на голосовании 1 месяц назад
Проблема следующая: при выполнении изменений на Add/Edit page и при нажатии кнопки отмена (либо же переходе на другую вкладку) изменения подтягиваются в основной Page без нажатия на кнопку "Сохранить".

Примечание: данные в базе данных SQL не изменяются. Изменения происходят только на клиенте.

Предположение: предполагаю вовлеченность Mode=TwoWay, но не знаю, чем заменить.

Возможные решения: при нажатии на кнопку "Отмена" - выполнить обновление контента основного Page. Но остальные косяки (просто перейти на другую вкладку) это не решит.

Имеется следующий основной Page:
Перехожу к редактированию и делаю изменения:
Результат после нажатия на кнопку "Отмена":
Данные выводятся на основном Page (верстка):
  

Переход на Page редактирования происходит следующим образом:
 private void EditBTN_Click(object sender, RoutedEventArgs e) 
{
NavigationService.Navigate(new AddEdit.Settings.AeActivityPage(ActivityLB.SelectedItem as Activity));
}

Данные отображаются на Page редактирования (верстка):
          materialDesign:HintAssist.Hint="Наименование" materialDesign:TextFieldAssist.HasClearButton="True" 
Style="{StaticResource MaterialDesignFilledTextBox}"/>

Обработчик нажатия на кнопку "Отмена":
 private void BackBTN_Click(object sender, RoutedEventArgs e) 
{
NavigationService.GoBack();
}
Голосование за лучший ответ
Александр Просветленный (20905) 2 месяца назад
Если данные сохраняются именно в БД, то SaveChanges в любом случае где-то вызывается. Потому что твой DbContext не является БД как таковой, и он только занимается трекингом сущностей и отслеживанием версий, что бы при комите понимать, какая сущность изменилась, а какая нет. А именно SaveChanges делает комит. Может ты считаешь, что если сущность есть в контексте = есть в БД, то это не так. Скорее всего SaveChanges где-то скрыт и ты не видишь его, но без SaveChanges данные в БД не попадут.
soraМастер (1628) 2 месяца назад
Так я и написал о том, что данные сохраняются на клиенте (действительны в момент сеанса), в БД они не подтягиваются
Александр Просветленный (20905) yungh47e, ну тогда не понятно в чем твоя проблема. Т.к. контекст является синглтоном, то все изменения будут доступны в любом представлении. Контекст будет хранить данные до тех пор, пока ты либо не сделашь комит, либо не вызовешь Dispose. Поэтому если тебе нет необходимости отслеживать изменения при помощи контекста, то добавляй AsNoTraking. Тогда ничего к тебе в контекст попадать не будет, даже если ты используешь двунаправленную привязку.
Похожие вопросы