Обновление EntityFramework 4 Дочерний список с использованием MVC3 - PullRequest
1 голос
/ 27 марта 2011

Я пытаюсь обновить дочернюю коллекцию (MVC3 и Entity Framework 4) Я не могу получать какие-либо обновления, чтобы сохранить их.

        [HttpPost]
        public ActionResult Edit(Subject EditedSubject, IEnumerable<SubjectTagPin> SubjectTagPins)
        {
            try
            {
                XDataModelContainer model = new XDataModelContainer();
                model.Subjects.Attach(EditedSubject);
                model.SaveChanges();
                return RedirectToAction("Index");
            }
            catch
            {
                return View(EditedSubject);
            }
        }

1 Ответ

2 голосов
/ 27 марта 2011

Это отдельный сценарий. Если вы хотите сохранить изменения в сущностях и отношениях, вы должны сказать EF, какие изменения были выполнены. EF не знает об этом и не выполняет никакой автоматической синхронизации с состоянием в базе данных. Эта проблема также известна как работа с отдельными объектными графами, и, на мой взгляд, это самая большая сложность в структуре сущностей (и, возможно, ORM в глобальном масштабе). Я ответил на подобный вопрос , и вы также можете найти связанный вопрос здесь .

Общий ответ: вы должны знать, какие отношения были созданы или удалены, и вы должны вручную установить либо состояние связанного объекта (в случае один-к-одному или один-ко-многим), либо состояние отношения (в случае много- слишком много). Сложность еще хуже, если у вас есть многие ко многим, и вы можете создать отношение к существующим объектам, создать новые связанные объекты или удалить существующие связанные объекты в одном запросе.

Мой общий совет - использовать менее элегантный, но гораздо более простой подход: загрузите свой граф сущностей из базы данных и объедините поступающие изменения в прикрепленный граф.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...