У меня есть объект домена Article
, который может иметь несколько Shapes
, тогда как тип является дочерним элементом статьи и не может быть связан с какой-либо другой статьей (один ко многим).
ассоциация моделируется как коллекция:
class Article
{
int ID;
string Name;
ICollection<Shape> Shapes;
}
Если я создаю основу для этой сущности, сгенерированные контроллеры и представления, кажется, поддерживают только простые поля типа данных, такие как Name
.Представления содержат поле ввода для Name
.Если я отправляю заполненную форму, MVC-инфраструктура создает объект Article
и присваивает свойству Name
указанное значение.Этот объект передается методу контроллера.
Как добавить поддержку ассоциаций типа «один ко многим», таких как Shapes?Мне нужно следующее поведение представления Article
в браузере:
- Дочерние объекты перечислены в таблице.
- Я могу добавить новый дочерний объект в таблицу, выполнивкоторый он создан и связан с базой данных.
- Я могу редактировать отдельные свойства существующей записи.
В идеале я надеюсь, что сможетполучить все эти изменения в методе контроллера следующим образом:
public ActionResult Create(Article article)
{
var types = article.Types;
Где types
должен содержать все дочерние типы.Объекты, которые уже существовали ранее, должны иметь правильный идентификатор.Однако свойства должны отражать то, что пользователь установил в браузере (так же, как это делается для объекта Article
).
Недавно добавленные объекты не будут иметь идентификатора и не будут существовать вбазы данных пока нет, моя работа как программиста состоит в том, чтобы извлекать объекты из коллекции и сохранять их в базе данных.
Мой вопрос:
Есть ли какая-либо поддержка вMVC 3 для отношений один ко многим?В качестве альтернативы, есть ли лучшие рекомендации, как реализовать это самостоятельно?
Обратите внимание, что многие ресурсы, использующие термин " один-ко-многим ", которые я нашел в Интернете, к сожалению, на самом делеговорить о один-к-одному или много-к-одному отношений, то есть, хотя вы можете выбирать из списка многих объектов, вы выбираете и связываете только одну.