我敢肯定,這是非常直接的,但是,在網絡沖刷後,我找不到任何東西來讓我直觀。使用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