我敢肯定,这是非常直接的,但是,在网络冲刷后,我找不到任何东西来让我直观。使用MVC 3实体框架代码 - 首先,如何在一对多关系中创建新的“多”对象?
我正在使用ASP.NET MVC 3与实体框架代码优先建模。
我在日历和事件之间有一个简单的一对多关系(对于每个日历可以有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
我创建了一个页面有链接到“创建新事件”是通过日历ID名为创建CalendarController动作(/本地主机:XXXXX /日历/创建/ 1)。
对于代码优先,我坚持这一点,我没有calendar_id(或类似的东西)作为Event类的指定成员,以将事件关联到日历。由于列由代码优先引擎生成,因此在数据库中存在。
我试着创建一个ViewModel,它结合了日历ID和一个Event对象,但是,当我从Create.cshtml返回时,日历ID从1重置为0,尽管事件信息是有效的。
最后,在一对多的关系中(如上),你如何创建一个新的事件(多方)与日历(一边)?我相信这很简单,我错过了一些东西,但任何和所有的帮助将不胜感激。
/* ** * ** * ** * ** * ** */
这里更详细一点,我希望会为我的问题添加说明。
- 用户选择一个日历(calendar_id,假设它是1)。
- 在该特定日历的详细信息页面上,存在指向控制器/操作(CalendarController/CreateEvent)的链接,以创建与该特定日历关联的新事件。 创建的路线是Calendar/CreateEvent/1(为id = 1的日历创建新事件)。
- 在CreateEvent操作中,我现在拥有新事件的日历实例的ID。
这是我弄糊涂......
为由代码优先引擎创建的事件对象不具有CALENDAR_ID数据成员,所以我没有什么可分配到达的CALENDAR_ID在路线数据中。
我知道这是一个标准的情况,但我错过了一些东西。我需要保持calendar_id到[HttpPost] CreateEvent。从那里,我可以简单地找到适当的日历(使用calendar_id),从新的Event窗体(在CreateEvent.cshtml中)获取信息来创建一个新事件,并简单地调用Calendar.Add(newEvent)。
如何保持在整个GET /表格/ POST周期CALENDAR_ID(或为此事日历)?再次
感谢您的帮助。
/* ** * ** * ** * ** * ** */ 我重新试图下面提到添加虚拟的可能的解决方案日历和CalendarId到Event类。我将接受的操作参数更改为HttpGet和HttpPost函数的Event对象。在HttpGet函数中,我将CalendarId设置为将添加新事件的日历的CalendarId(如上所示,id == 1)。在CreateEvent视图中一切正常,但是,在返回到CreateEvent的HttpPost动作时,CalendarId被重置为0.
我仍然错过了一些东西......但是,感谢您的帮助,米仍在寻找那个火花。
谢谢。下一次我会记住这一点(它实际上听起来很有趣),但是,我已经掌握了一切,我知道我只是想念一些愚蠢的东西,我想知道它是什么。 – Billbris
关于你最后的问题,(为什么不添加日历...)。代码优先引擎抱怨说,当我这样做时,我有两个CalendarId。冲突是由我手动输入的CalendarId以及由代码优先引擎生成的CalendarId造成的。 – Billbris