У меня проблемы с нахождением четкого ответа на мою ситуацию при поиске переполнения стека и Google, надеюсь, кто-то может указать мне правильное направление.
Моя ситуация
Я хочу иметь возможность использовать одну форму редактирования (в одном представлении) для обновления иерархического объекта глубиной 3 уровня с использованием ASP.NET MVC 3 и Entity Framework 4 CTP (Code-first) - модель состоит из служб, у которого может быть много вариантов обслуживания, которые, в свою очередь, могут иметь много предметов инвентаря.
Я ожидал, что смогу использовать связыватель модели MVC по умолчанию (через TryUpdateModel) для:
- Обновление существующей записи «Служба»
- Добавление / обновление / удаление записей «Service Option» (прикрепленных к Сервису) в зависимости от опубликованных значений
- Добавление / обновление / удаление записей «Инвентаризация» (прикрепленных к каждому варианту обслуживания) в зависимости от опубликованных значений
Моя модель
[Bind(Include="Name, ServiceOptions")]
public class Service {
[Key]
public int ServiceID { get; set; }
public string Name { get; set; }
public DateTime DateCreated { get; set; }
public virtual ICollection<ServiceOption> ServiceOptions { get; set; }
}
[Bind(Include="ServiceOptionID, Description, Tags")]
public class ServiceOption {
[Key]
public int ServiceOptionID { get; set; }
public int ServiceID { get; set; } /* parent id reference */
public string Description { get; set; }
public virtual ICollection<Inventory> InventoryItems { get; set; }
}
[Bind(Include = "InventoryID, Description")]
public class Inventory {
[Key]
public int InventoryID { get; set; }
public int ServiceOptionID { get; set; } /* parent id reference */
public string Description { get; set; }
}
Идеальный метод управления:
[HttpPost]
public ActionResult EditService(int id) {
Service service = db.Services.Single(s => s.ServiceID == id);
TryUpdateModel(service); // automatically updates child and grandchild records
if (ModelState.IsValid) {
db.SaveChanges();
return RedirectToAction("Index");
}
return View(service);
}
Есть ли способ осуществить эту утопическую мечту или я лаю не на том дереве? Я открыт для использования другой технологии (такой как обычный EF4, Automapper и т. Д.)
Заранее спасибо!