ASP.NET MVC / EF4 / POCO / Repository - Как обновить отношения?

У меня есть связь 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 ):
        • Рекомендация 1 ( Рекомендация )
        • Рекомендация 2 ( Рекомендация )

      Если я нахожусь в режиме редактирования, два флажка уже установлены. Третья (представляющая три рекомендации) не отмечена .

      Но если я поставлю этот флажок, приведенная выше модель станет:

      Обзор:

      • Рекомендации ( 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 ]) необходимо вызывать для каждой рекомендации, в зависимости от ее новый / измененный / удаленный.

13
задан Community 23 May 2017 в 12:26
поделиться