У меня есть мастер в моем приложении asp.net MVC, которое построено на этом руководстве мастера SoG - RESTFUL .
Чтобы понять проблему, я сначала объясню ситуацию ниже.Для этого я буду использовать фиктивную ситуацию, мы попытаемся создать человека с адресом.Опять же, это просто фиктивная ситуация!
Ситуация
При запуске объект (человек), который будет создан и сохранен с помощью мастера, будет создан как пусто объект (человек) и будет заполнено во время «этапа» мастера.Между различными шагами мастера объект персоны сохраняется в СЕССИИ и извлекается с помощью ключа.Этот объект имеет отношение с подобъектом.Например, адрес.Этот адрес можно получить из БД с помощью раскрывающегося меню в мастере или можно создать в самом мастере.Это означает, что при создании я создам пустой адресный объект , поэтому мы имеем следующую инициализацию:
Persons p = new Persons();
p.Addressess = new Addressess()
Этот объект передается в FormViewModel и используется в форме мастера.Здесь у меня есть раскрывающийся список, позволяющий выбрать: (1) «создать новый адрес для человека», который заполняет переданный объект пустого адреса данными обычными способами (TryUpdateModel ()) и (2) «адрес х»,адреса для выбора из вашей БД.
Выбор одного из адресов в раскрывающемся списке в методе POST контроллера извлечет этот объект из БД и свяжет его с лицом. Адреса. В коде:
p.Addresses = repository.GetContactByID(id);
Проблема
Все работает нормально при работе через страницы мастера. Проблема возникает, когда я вызываю savechanges (). Во время финального обзора полный объект, который будет добавлен, отображается правильно (информация о человеке + информация об адресе, как выбрано / передано), а также пустой адрес сохраняется в базе данных.
repository.SaveChanges();
При попытке добавить пустой адрес кБД, которая будет вводить ошибку ModelState, поскольку адреса имеют некоторые ненулевые значения, которые не установлены для пустого объекта.
** Моя текущая идея ** Моя текущая мысльДело в том, что пустой объект, созданный в начале для пустого объекта, каким-то образом помещается в добавленное состояние (objectcontext), когда я впервые связываю его с person.Addresses.Может ли это быть так?Как правильно сделать то, что я хочу?Могу ли я вручную удалить объекты из контекста объекта _addedEntityStore?
Дополнительная информация
Выбор адреса в раскрывающемся списке будет force form.submitв метод POST-контроллера и последовательно он перезагрузит форму с обновленной информацией выбора и полями ввода для нового адреса (если требуется новый), установленным на «отключен», так что вы видите только информациюно не может редактировать существующий адрес.
Кроме того, используется только один objectContext , который сохраняется в СЕССИИ.