2012-01-10 2 views
0

Я ищу подход к дизайну, поэтому у меня нет никакого кода для обмена.Использование кэшированных данных из дочернего окна в родительском окне без поездки в базу данных

У меня есть приложение с богатым клиентом WPF, которое предоставляет подробные данные пользователю. Когда пользователь нажимает «Изменить», вся форма переходит в состояние редактирования. Это показывает пару кнопок «Добавить». Эти кнопки «Добавить» открывают дочерние представления, предоставляя пользователю инструменты для создания новых объектов. Думайте «добавление нового элемента в заказ клиента, с которым вы работаете». Это легкая часть.

Когда пользователь закрывает эти дочерние представления, новые объекты должны отображаться и редактироваться в родительском представлении для продолжения детального редактирования. Что-то вроде «добавьте новый элемент в дочернюю форму, выберите номер детали, затем закройте дочерний элемент и добавьте количество и дату доставки на родительском представлении. У меня нет гибкости в этом рабочем процессе. У меня также есть эта работа.

Когда пользователь закончил с родительским представлением и удовлетворен вновь добавленными деталями и подробными изменениями, они могут нажать «Сохранить». То есть, когда все изменения должны вернуться к базе данных. Если пользователь нажимает кнопку «Отменить», все изменения, в том числе сущности, созданные на дочерних представлениях, должны исчезнуть, а форма вернулась в исходное состояние.

Это последний бит, который меня плетит. Я почти новичок в Entity Framework, поэтому я думал, что смогу как-то сохранить весь набор изменений в памяти на клиенте и совершить все изменения в базы данных в точке сохранения пользователя. Я не знаю, возможно ли это, или как мне нужно внести изменения в свои данные, чтобы предотвратить случайные поездки в базу данных.

Чтобы поместить все факты в таблицу, я использую единицу шаблона работы, но при необходимости я имею доступ к объекту контекста EF. Если мне нужно работать с объектом context, я должен сделать это через несколько представлений и связанные с ними модели представления.

Я посмотрел на много stackoverflow Q & A, но не могу найти путь к решению или, возможно, признать его. У меня есть идеи об использовании клонированных объектов или, возможно, транзакций, но не знаю, есть ли другие или как выбирать между ними. Это будет новые навыки и потребует времени, затраченного на обучение. Я готов потратить время на изучение нового навыка, но не обучение и попытки три или четыре.

Я благодарен за любые советы, которые вы могли бы предложить.

ответ

1

В конструкторе при чтении из БД записи дважды. Одна частная переменная для текущей и одна для старой.

private string lNameOld; 
private string lName; 

public string LName 
{ 
    get { return lName; } 
    set 
    { 
     if(lName == value) return; 
     lName = value; 
     NotifyPropertyChanged("LName"); 
     } 
    } 

    public void save() 
    { 
     if (lName != lNameOld) 
     { 
      // write to database 
      // really should process all in a transaction 
      lNameOld = lName; 
     } 
    { 

    public void cancel() 
    { 
     if (lName != lNameOld) 
     { 
      Lname = lNameOld; // notice capital L so Notify is called 
     } 
    { 
+0

Это будет работать только для типов значений, не так ли? У меня есть типы объектов, которые содержат другие типы объектов. Любая идея для них? – JimBoone

+0

Почему бы вам не попробовать? Вам нужно будет скопировать объект и сравнить его. Прямое objA = objB будет иметь только ссылку. – Paparazzi

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