0

Я новичок в MVC 3 и Entity Framework, поэтому я хотел бы знать, что является лучшим подходом.MVC3 и EF: как обрабатывать операции CRUD вложенных объектов (родительский, дочерний и внук)

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

Моя идея состояла в том, чтобы использовать частичные представления для дочерних объектов при обновлении родителя.

У меня есть 3 вида в виду:

  1. Create/Update курс: все основные детали для курса
  2. Модули курса (в основном различные представления для обновления курса), который имеет возможность добавить несколько парциальное просмотры, каждое создание модуля
  3. курс Timeline (еще другое представление курса обновления), который содержит список всех модулей (на отдельной диве) и имеет возможность добавить несколько частичных представления, каждый создает главу

Является ли мой план правильным и правдоподобным? Я планирую использовать скрытые поля для хранения идентификаторов. Я также хочу, чтобы сейвы выполнялись асинхронно.

Любой совет или информация будут высоко оценены. Благодаря!

+2

Ваш вопрос немного расплывчатый и неспецифический. Это звучит все разумно и, безусловно, выполнимо. Я предлагаю вам только начать проект и задать более конкретные вопросы, когда вы застряли в разработке или реализации. – Slauma

+0

спасибо! оцените это :) – AnimaSola

+0

Единственным советом, который я бы добавил, является то, что если вы планируете делать асинхронно, вы должны убедиться, что знакомы с JQuery – StanK

ответ

1

Я думаю, что это то, что ваш после, но не уверен. Чтобы справиться с сохранением сущности детей/внуков, вы можете сделать это несколькими способами. Вы можете выполнять операции crud для каждого объекта отдельно. Таким образом, это будет включать, например, сохранение модулей самостоятельно со ссылкой на курс, возможно, courseId.

Или вы можете посмотреть на сохранение только заполнителя, который в этом случае выглядит как его объект курса. Это потребует загрузки курса, заполнения модулей на курсе и для каждого модуля заполнять главы. Затем, когда вы `db.Courses.Add (newCourse); db.SaveChanges(); все сущности будут сохранены. Вы должны убедиться, что ваши внешние ключи и ссылки на модели настроены правильно.

Например, чтобы сохранить дочерние объекты:

public ActionResult DoSomething(int courseId, Module newModule) 
{ 
    var course = someService.LoadCourse(courseId); 
    course.Modules.Add(newModule); 

    using (var db = new MyDbContext()) 
    { 
     db.Courses.Add(course); 
     db.SaveChanges(); 
    } 

    return RedirectToAction("Success"); 
} 

Или вы можете сохранить по отдельности:

public ActionResult DoSomething(Module newModule) 
{ 
    using (var db = new MyDbContext()) 
    { 
     //You will need to make sure newModule.CourseId is set correctly 
     db.Modules.Add(newModule); 
     db.SaveChanges(); 
    } 

    return RedirectToAction("Success"); 
} 

В зависимости от ваших взглядов, вы сможете определить, какой путь лучше идти. Что касается асинхронной экономии, вы сможете вызвать эти конечные точки с jquery, разместив модели как json. На стороне примечания, одна вещь, на которую нужно обратить внимание, - создать пользовательский антивирусный антивирусный аутентификатор токенов для json-запросов, example.