2012-04-17 4 views
1

У меня есть рабочее приложение WPF с использованием шаблона MVVM, в котором ViewModel вызывает запросы, которые выполняют все операции сохранения/обновления/получения/удаления. Я сделал это, потому что легко изменить эти запросы для замены системы хранения, например.Как я могу реализовать функции Save/Discard с помощью NHibernate?

Приложение работает нормально, если данные сохраняются/удаляются на лету, но клиент хочет кнопку «Сохранить», поэтому я должен помнить (или Nhibernate), какие изменения внесены. Я не хочу, чтобы сессия открывалась долгое время, поэтому я не знаю, как это сделать. Знаете ли вы какую-либо модель/архитектуру, которая будет работать?

+0

Вы имеете в виду lazynes из NHibernate или какой-то внутренний кэш ? Существует слишком много способов его реализации .... – Jasper

+0

Это как мое приложение, нужно будет что-то запомнить, какие столбцы таблицы были удалены, добавлены или изменены, а затем в конце флеша или нет. Проблема в том, что я не использую Nhibernate в ViewModel, а во внешних запросах, которые извлекают объекты для меня или сохраняют их в базе данных. –

ответ

1

это работало для меня простое приложение:

  • открытой сессии для ViewModel
  • если не использовать транзакции, то Flushmode.Never (предотвращает запросы от смыва)
  • использования генератора идентификатора клиента, который генерирует боковые иды (хило, guidcomb, ...)
  • не используют Flush после CRUD
  • проверки session.IsDirty для включения SaveButton
  • если сохранить -> вровень() или совершить
  • если отменить -> Утилизировать сеанс или откатить

NH вышлет все действия в конце на одном уровне

+0

Спасибо, я думал об этом, но не проблема, чтобы сеанс был открыт так долго? Я имею в виду, что пользователи могут открывать мое приложение и держать его открытым в течение нескольких часов, делая изменения или нет. –

+1

Открытие сеанса не означает, что подключение к базе данных открыто, поэтому безопасно использовать его даже на более длительное время. Сделки в обратном случае должны быть как можно короче. Я принял совет от http://msdn.microsoft.com/en-us/magazine/ee819139.aspx – Firo

+0

Okey, который мне кажется отличным, поскольку я был обеспокоен тем, что он был открыт какое-то время. –

Смежные вопросы