Когда я должен обновить базу данных, чтобы отразить изменения свойств? - PullRequest
3 голосов
/ 22 февраля 2012

Я новичок в WPF и создаю небольшое приложение с Linq To Entities (и базой данных SQLite).

Я просто хотел бы знать, где я должен вызывать мои методы для обновления базы данных, когда свойство изменилось? Я бы сказал в свойстве во ViewModel, как это:

public string FirstName
{
    get
    {
        return this.person.FirstName;
    }
    set
    {
        this.person.FirstName = value;
        OnPropertyChanged("FirstName");
        this.person.updateFirstname(value);
    }
}

Я не уверен, что это лучшее решение ...

Ответы [ 3 ]

2 голосов
/ 22 февраля 2012

Проблема времени сохранения в базе данных приводит к шаблону Единица работы . Linq-to-Entities имеет разумную реализацию этого с ObjectContext , где данные помещаются в очередь в контексте и затем сохраняются в базе данных, когда логическая единица работы завершена.

В вашем примере вы уже устанавливаете свойство для объекта L2E, Person, которое, вероятно, связано с контекстом. Когда вы вызываете ObjectContext.SaveChanges , это будет сохранено без необходимости использования метода updateFirstname.

Вы должны решить, когда вызывать ObjectContext.SaveChanges (и, таким образом, завершить единицу работы), и делать это, когда пользователь явно сохраняет данные или когда форма закрыта (опционально, предлагая пользователю совершить или отбросить изменения) это разумный подход здесь. Чтобы реализовать это, ваши viewmodels ссылаются на ObjectContext и могут вызывать метод SaveChanges, когда выполняется действие пользователя (обычно моделируемое с помощью WPF ICommand , публикуемого viewmodel и привязанного к представлению ).

0 голосов
/ 22 февраля 2012

Лучше всего добавить интерфейс службы в конструктор ViewModel и использовать какой-либо тип службы для обновления базы данных. Таким образом, вы получаете слабосвязанную систему, и ваша ViewModel остается независимой от вашего уровня доступа к данным, как и должно ...

0 голосов
/ 22 февраля 2012

Вы должны концентрировать свои обновления вокруг единицы работы, а не вокруг отдельных областей. Если ваша база данных должным образом нормализована, каждая строка будет представлять сущность и должна рассматриваться как таковая, обновления сущности должны поддерживать сущность в «допустимом» состоянии. В вашем сценарии, если вы обновите имя человека с намерением также обновить фамилию, если приложение или сервер взорвет вашу личную запись будет недействительным.

С точки зрения MVVM, я обычно либо использую стратегию "обновить всю строку сразу", и направляю это событие в viewmodel, либо я просто даю им кнопку сохранения:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...