У меня есть простой ObjectListView
, который отображает некоторые столбцы из EntityFramework
объектов, называемых Person
(для упрощения). Я загружаю его с Entity Framework в ObjectListview
, а затем deatch
из Context. У человека есть несколько полей (например, Имя, Фамилия, Файл, ...).
Учитывая, что некоторые файлы имеют размер 5–50 МБ, я не хочу загружать / сохранять их в базе данных без необходимости. Теперь, когда кто-то дважды щелкает по ObjectListView
, выбранный Person
загружается в поля TextBox. При редактировании любого из полей я проверяю, изменились ли Person
Name или SurName и изменились ли они, как в приведенном ниже коде.
private void test (Person person){
using (var context = new EntityBazaCRM(Settings.sqlDataConnectionDetailsCRM)) {
context.Persons.Attach(dokument);
if (person.Name != nameTextBox.Text) {
person.Name = nameTextBox.Text;
context.ObjectStateManager.GetObjectStateEntry(person).SetModifiedProperty("Name");
}
if (person.SurName != surNameTextBox.Text) {
person.SurName = surNameTextBox.Text;
context.ObjectStateManager.GetObjectStateEntry(person).SetModifiedProperty("SurName");
}
context.SaveChanges();
}
}
Это работает .. но я бы хотел сохранить изменения не сразу после того, как пользователь их изменит, а в конце, когда он нажмет БОЛЬШУЮ кнопку SAVE ALL
, и тогда они пройдут через все элементы ObjectListView и обновят их. по мере необходимости в базе данных. Проблема в том, что я не могу обновить контекст и сделать это позже, так как контекст не будет использоваться тогда, но в конце при сохранении всего.
Так, каковы мои варианты? Мне было указано использовать INotifyPropertyChanged , но, как бы я ни смотрел на код, я не думаю, что это хорошо для такого типа ситуаций, или я просто не знаю, как его использовать.
Другой вариант состоял в том, чтобы фактически создать значение bool для каждого Column
из базы данных, например
public partial class Person
{
public bool NameChanged {get;set; }
public bool SurnameChanged { get; set; }
}
И при сохранении я бы проверял, изменился ли bool, и если да, то сделайте магию ObjectStateManager в контексте до сохранения.
Есть ли другой способ сделать это?