У меня есть связь 1 .. * между Review и Рекомендациями .
Соответствующая часть моей модели (которая также является POCO, отображаемый EF4):
public class Review
{
public ICollection Recommendations { get; set; }
}
В режиме редактирования я представляю Рекомендации как набор флажков.
Когда я пытаюсь добавить новую рекомендацию как часть редактирования обзора (например, отметьте другой флажок), ничего не происходит - и я знаю, почему ...
Я использую «технику заглушек» для обновления своих объектов - например, я создаю объект с таким же key, прикрепите его к графику, затем выполните ApplyCurrentValues
. Но это работает только для скалярных свойств, а не для свойств навигации.
Я нашел этот вопрос StackOverflow , который выглядит хорошо, но я пытаюсь понять, как заставить это работать с POCO / Repository (и ASP.NET MVC - отдельный контекст).
Поскольку я использую POCO, обзор . Рекомендации
- это ICollection
, поэтому я не могу выполнить проверку . Рекомендации.Приложить
. Я тоже не использую объекты с самотслеживанием, поэтому мне нужно вручную работать с графиком / отслеживанием изменений, что до сих пор не было проблемой.
Итак, вы можете визуализировать сценарий:
Обзор:
ICollection
): Сделайте обзор . Рекомендации. Приложите
. Я тоже не использую объекты с самотслеживанием, поэтому мне нужно вручную работать с графиком / отслеживанием изменений, что до сих пор не было проблемой.
Итак, вы можете визуализировать сценарий:
Обзор:
ICollection
): Сделайте обзор . Рекомендации. Приложите
. Я тоже не использую объекты с самотслеживанием, поэтому мне нужно вручную работать с графиком / отслеживанием изменений, что до сих пор не было проблемой.
Итак, вы можете визуализировать сценарий:
Обзор:
ICollection
):
Рекомендация
) Рекомендация
) Если я нахожусь в режиме редактирования, два флажка уже установлены. Третья (представляющая три рекомендации) не отмечена .
Но если я поставлю этот флажок, приведенная выше модель станет:
Обзор:
ICollection
]):
Рекомендация
) Рекомендация
) Рекомендация
) И поэтому мне нужно добавить Три рекомендации график как новый объект .
Нужны ли мне скрытые поля для сравнения опубликованных данных с существующим объектом? Или мне следует сохранить объект в TempData и сравнить его с опубликованным объектом?
EDIT
Чтобы избежать путаницы, вот полный вызов стека приложения:
ReviewController
[HttpPost]
public ActionResult Edit(Review review)
{
_service.Update(review); // UserContentService
_unitOfWork.Commit();
}
UserContentService
public void Update(TPost post) where TPost : Post, new()
{
_repository.Update(post); // GenericRepository
}
GenericRepository - используется как GenericRepository
public void Update(T2 entity) where T2 : class, new()
{
// create stub entity based on entity key, attach to graph.
// override scalar values
CurrentContext.ApplyCurrentValues(CurrentEntitySet, entity);
}
Итак, методы репозитория Update
(или Add
или Delete
]) необходимо вызывать для каждой рекомендации, в зависимости от ее новый / измененный / удаленный.