2013-04-02 37 views
0

如何使用EF將MVC 4中的父記錄添加到父記錄中?MVC 4向現有父項添加子記錄

我有一個網格顯示新聞。我需要添加那些兒童記錄的更新。一個數據庫表有新聞,另一個有更新。它們通過每個表中的NewsID鏈接。

NEWS模型

[Key] 
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
public int NewsId { get; set; } 

public string Body { get; set; } 
//other fields 

最新通報MODEL

[Key] 
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
public int NewsUpdateId { get; set; } 
public int NewsId { get; set; } 

public string Body { get; set; } 
//other fields 

新聞索引視圖(僅適用於部分貼在這裏,它是顯示這些詳細信息行的網格)

@foreach (var item in Model) { 
    <tr> 
     <td>@Html.ActionLink(item.Headline, "Details", new { id=item.NewsId })</td> 
     <td>@Html.Raw(item.Body.Remove(300))...</td> 
     //other fields 
     <td>@Html.ActionLink("Edit", "Edit", new { id=item.NewsId })</td>    
     //WOULD LIKE ANOTHER LINK GOING TO "UPDATE" SCREEN TO ADD CHILD UPDATES, PASSING IN THE PARENT ID 
    </tr> 
} 

控制器(現在)

public ActionResult Update() 
    { 
     return View(); 
    } 

但當然,當我在該更新屏幕上保存時,沒有NewsID保存到更新並且失敗。我如何將索引屏幕/網格中的NewsID傳遞到我的「創建更新」屏幕中,然後在該更新屏幕上進行檢索並將其添加到我的保存操作中?

UPDATE 由於沒有人知道如何做到這一點,所以我會在沒有運氣的情況下繼續做下去。

我試過使用NewsUpdate屏幕就像編輯你傳遞的id值。不同之處在於,對於編輯,您正在編輯該記錄。對於這個NewsUpdate,我添加了一個NewsUpdate,它是News的子記錄,所以我擁有現有的NewsID並需要將它傳遞給我的NewsUpdate屏幕,並最終用它來設置NewsUpdate.NewsID。

當我保存NewsUpdate屏幕,該模型是無效的,因爲它缺少的,所以我想這個設置是:

var NewsID = Request.Url.PathAndQuery.ToString(); //grab it from url News/Update/8 
NewsID = NewsID.Replace("/News/Update/", ""); //results in NewsID = 8 
NewsUpdate.NewsID = Convert.ToInt32(NewsID); 

這工作,但該模型仍然是無效的權利在此之後。所以這不好。

回答

0

明白了。

public ActionResult Update(int id = 0) 
    { 
     NewsUpdate myUpdate= db.NewsUpdate.Create(); //create empty child model 
     myUpdate.NewsID = id; //set my parent's ID on the child model 
     View(myUpdate); //send child model to child's create screen aka "NewsUpdate" 
    } 

這會在子模型中傳遞我的父ID,而其餘的NewsUpdate屏幕就像標準的創建屏幕一樣正常工作。