Обновление дочернего списка EntityFramework 4 с использованием MVC3

Я пытаюсь обновить дочернюю коллекцию (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);
            }
        }

person Ahmed Khalaf    schedule 27.03.2011    source источник
comment
Это действительно ничего не спасет, потому что Attach по умолчанию устанавливает все в состояние Unchanged. Итак, чего вы пытаетесь достичь?   -  person Ladislav Mrnka    schedule 27.03.2011
comment
Я пытался изменить состояние с диспетчера состояния объекта на измененное, но безрезультатно.   -  person Ahmed Khalaf    schedule 27.03.2011
comment
Я пытаюсь сохранить измененный объект + сохранить дочернюю коллекцию (в основном добавлены новые элементы)   -  person Ahmed Khalaf    schedule 27.03.2011
comment
Кто-нибудь, дайте пример кода, связанного с вопросом, и ответ @Ladislav Mrnka.   -  person CallMeLaNN    schedule 07.04.2011


Ответы (1)


Это отдельный сценарий. Если вы хотите сохранить изменения в сущностях и отношениях, вы должны сказать EF, какие изменения были выполнены. EF этого не знает и не выполняет никакой автоматической синхронизации с состоянием в базе данных. Эта проблематика также известна как работа с отсоединенными графами объектов, и, на мой взгляд, это самая большая сложность в структуре сущностей (и, вероятно, ORM в глобальном масштабе). Я ответил на похожий вопрос, и вы также можете найти < href="https://stackoverflow.com/questions/4653834/asp-net-mvc-ef4-poco-repository-how-to-update-relationships">связанный вопрос здесь.

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

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

person Ladislav Mrnka    schedule 27.03.2011
comment
было бы неплохо, если бы вы добавили в этот ответ несколько фрагментов кода, чтобы дать полное представление, особенно для начинающих EF :) спасибо :) - person Ahmed Khalaf; 27.03.2011
comment
Просто опишите, что именно вы хотите сделать. В том числе какие свойства навигации вы хотите изменить и какой у вас тип отношений. Также опишите, добавляете ли вы только отношение к существующим объектам или также добавляете новые объекты. - person Ladislav Mrnka; 27.03.2011