Я уверен, что это очень просто, однако, прочесывая сеть, я не могу найти ничего, что могло бы мне помочь.
Я использую ASP.NET MVC 3 с моделированием Entity Framework Code-first.
У меня есть простая связь один-ко-многим между Календарем и Событием (для каждого календаря может быть 0 или более Событий).
Проще говоря, я не понимаю, как создать / вставить новое событие, связанное с календарем.
Определения моего домена сущности:
public class Calendar
{
[Key]
public long id { get; set; }
public string title { get; set; }
public string description { get; set; }
public virtual ICollection<Event> events { get; set; }
} //class
public class Event
{
[Key]
public long id { get; set; }
public string title { get; set; }
public string description { get; set; }
public DateTime startdate { get; set; }
public DateTime enddate { get; set; }
public int importance { get; set; }
} //class
Я создал страницу со ссылкой «Создать новое событие», которая передает идентификатор календаря в действие CalendarController с именем «Создать» (/ localhost: xxxxx / Calendar / Create / 1).
Я застрял в этой точке, как и во-первых, у меня нет calendar_id (или чего-то подобного) в качестве указанного члена класса Event, чтобы связать событие с календарем. Это существует в базе данных, поскольку столбец был сгенерирован механизмом первого кода.
Я попытался создать ViewModel, объединяющий идентификатор календаря и объект Event, однако, когда я возвращаюсь из Create.cshtml, идентификатор календаря был сброшен с 1 до 0, хотя информация о событии была действительной.
В заключение, в отношении один-ко-многим (как указано выше), как вы создаете новое событие (сторона многих) с календарем (одна сторона)? Я уверен, что это довольно просто, и я что-то упускаю, но любая помощь будет оценена.
/ ************* *** /
Вот немного больше деталей, которые, я надеюсь, добавят разъяснения к моей проблеме.
- Пользователь выбирает календарь (calendar_id, скажем, 1).
- На странице сведений для этого конкретного календаря есть ссылка на контроллер / действие (CalendarController / CreateEvent) для создания нового события, связанного с этим конкретным календарем.
Созданный маршрут - Calendar / CreateEvent / 1 (создайте новое событие для календаря с id == 1).
- В действии CreateEvent у меня теперь есть идентификатор для экземпляра календаря для нового события.
Здесь я запутался ...
Объект Event не имеет члена данных calendar_id, так как он создан механизмом первого кода, поэтому мне нечего присвоить calendar_id, который поступил в данные маршрута.
Я знаю, что это стандартная ситуация, но я что-то упускаю. Мне нужно сохранить calendar_id до [HttpPost] CreateEvent. Оттуда я могу просто найти подходящий календарь (используя calendar_id), взять информацию из новой формы события (в CreateEvent.cshtml), чтобы создать новое событие, и просто вызвать Calendar.Add (newEvent).
Как мне сохранить calendar_id (или календарь в этом отношении) в течение всего цикла GET / form / POST?
Еще раз спасибо за любую помощь.
/ ************* *** /
Я перепробовал возможное решение, упомянутое ниже, чтобы добавить виртуальный Calendar и CalendarId в класс Event. Я изменил принятый параметр действия на объект Event для функций HttpGet и HttpPost. В функции HttpGet я установил для CalendarId значение календаря, в которое будет добавлено новое событие (как указано выше, id == 1). В представлении CreateEvent все работало нормально, однако при возврате к действию HttpPost CreateEvent для CalendarId было установлено значение 0.
Я все еще что-то упускаю ... но спасибо за помощь, и я все еще ищу эту искру.