我目前使用EF4.3和Code First。我的對象創建工作(通過我的視圖 - 只使用自動生成的創建),但是當我試圖編輯一個對象時,它不會保存任何更改,這些更改很快會與我的導航屬性相關聯。我一直在reading on relationships,但我不明白如何告訴我的背景,這種關係已經改變。無法獲取關係更新實體框架中的導航屬性
這裏是我的實現的一些示例代碼。
@* Snippet from my view where I link into my ViewModel. *@
<div class="row">
<div class="editor-label">
@Html.LabelFor(model => model.ManagerID)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.ManagerID, ViewBag.Manager as SelectList, String.Empty)
@Html.ValidationMessageFor(model => model.ManagerID)
</div>
</div>
這是我的控制器實現(我的編輯的POST):
[HttpPost]
public ActionResult Edit(ProjectViewModel projectViewModel)
{
if (ModelState.IsValid)
{
Project project = new Project();
project.ProjectID = projectViewModel.ProjectID;
project.Name = projectViewModel.Name;
project.ProjectManager = repository.GetUser(projectViewModel.ManagerID);
repository.InsertOrUpdateProject(project);
repository.Save();
return RedirectToAction("Index");
}
ViewBag.Manager = new SelectList(repository.GetUsers(), "UserID", "FullName", projectViewModel.ManagerID);
return View(projectViewModel);
}
在我的項目對象:
public class Project
{
public int ProjectID { get; set; }
[Required]
public string Name { get; set; }
// Navigation Properties
public virtual User Manager { get; set; }
}
下面是從儲存庫中的相應的方法(其中,我的上下文):
public void InsertOrUpdateProject(Project project)
{
if (program.ProjectID == default(int))
{
context.Projects.Add(project);
}
else
{
context.Entry(project).State = EntityState.Modified;
}
}
爲了清楚起見,這可以更新我的屬性,但它不會更新我的導航屬性(在本例中爲管理器)。感謝任何幫助。
非常好。謝謝。我原本完成了外鍵路線,但遇到了一些問題。事實證明,它的工作原理,但我必須定義導出屬性的[ForeignKey(「Name」)]屬性,以正確映射一切。接受你的答案。謝謝! – glockman 2012-03-07 20:29:42
@ user1240560:在我的答案中的名稱實際上應該沒有ForeignKey屬性(通過名稱約定檢測FK)。但是,如果你的名字有些不同,並且不遵循約定規則,那麼是的,你需要註釋。 – Slauma 2012-03-07 21:18:58
@Slauma我愛你,其他方法應該與Code First Model一起工作,但是使用DataBase首先,唯一對我有用的是你的黑客,我已經搞了好幾天,現在我不得不說我愛你這麼多 – 2014-05-19 01:21:07