Я знаю, что это было задано раньше, но после долгих часов поиска и кодирования я не могу подойти к рабочему и чистому подходу. Вот что у меня есть:Полная вставка/обновление/удаление дочерних объектов в платформе Entity
public class QuestionModel
{
public int QuestionID { get; set; }
public string QuestionText { get; set; }
public IList<QuestionChoiceModel> Choices { get; set; }
}
public class QuestionChoiceModel
{
public int ChoiceID { get; set; }
public string ChoiceText { get; set; }
}
Я использую EF 5 для этого приложения ASP.Net MVC. Общий шаблон репозитория и инъекция зависимостей с помощью Ninject с использованием InRequestScope()
находятся на месте и работают плавно. Эти модели сопоставляются с объектами/без объектов.
Добавление новых вопросов к базе данных прямолинейно. Я задал свойство Question некоторых экземпляров QuestionChoice, а EF обрабатывает остальные.
Проблема об обновлениях. Предположим, у нас есть вопрос в базе данных с 3 QuestionChoices:
ChoiceID QuestionID ChoiceText
-------- ---------- ----------
1 1 blah blah
2 1 blah blah
3 1 blah blah
Когда страница редактирования Вопроса открывает (GET:/Вопросы/Редактировать/1), я показываю эти 3 варианта с использованием foreach
в бритве. Я написал код JQuery, который добавляет или удаляет требуемую разметку для элементов ввода, если пользователь хочет. Таким образом, QuestionChoice с ID = 1 может быть отредактирован на клиенте, ID = 2 может быть удален, и новый ID = 4 может быть добавлен. Данные формы привязаны к QuestionModel отлично, когда пользователь нажимает кнопку «Сохранить» (POST:/Questions/Edit/1). Модель правильно отображается на объект вопроса. Вот где начинается история!
Теперь объект Question имеет набор QuestionChoices, некоторые из которых уже находятся в базе данных, некоторые из них должны быть добавлены в базу данных, а некоторые из них должны быть удалены из базы данных.
Я прочитал много постов как: Entity Framework not saving modified children
Я могу справиться изменения в этой грязной дороге. А также новые записи:
this._context.Entry(choice).State = EntityState.Added;
Но я ищу более элегантный способ. А также обрабатывать записи, которые необходимо удалить. Есть ли хороший подход для обработки полного вставки/обновления/удаления дочерних объектов в этом сценарии с использованием EF? Честно говоря, я ожидал большего от EF.
Спасибо. Я буду смотреть в него. –