我正在構建一個MVC3項目,首先使用Razor和Entity Framework代碼。我有兩種模式:實體框架「ObjectStateManager中已存在具有相同鍵的對象。」 - 我無法理解如何或從這裏做什麼
public class Translation
{
public int TranslationId { get; set; }
public string Pt { get; set; }
public string Es { get; set; }
public string En { get; set; }
}
public class Page
{
public int PageId { get; set; }
public Translation Title { get; set; }
public Translation Description { get; set; }
public int? ParentPageId { get; set; } // page can have a parent page
public Page ParentPage { get; set; }
}
我爲頁面模型的CRUD創建了PagesController。然後我編輯添加輸入的翻譯性質的創建和編輯觀點:
它運作良好,上創建,增加兩條新線的翻譯表(一個由Title_TranslationId和其他Description_TranslationId refered)與輸入內容。但在更新的時候,我得到的提到的錯誤在行:
db.Entry(page).State = EntityState.Modified;
的PagesController是因爲它被創造了,所以沒有多餘的武官都正在取得進展。如果我在編輯視圖中刪除其中一個翻譯輸入,它不會拋出錯誤,但不會更新翻譯。
的PagesController代碼:
private AdminEntities db = new AdminEntities();
public ViewResult Index()
{
return View(db.Pages.ToList());
}
public ViewResult Details(int id)
{
Page page = db.Pages.Find(id);
return View(page);
}
public ActionResult Create()
{
ViewBag.ParentPageId = new SelectList(db.Pages, "ParentPageId", "Description");
return View();
}
[HttpPost]
public ActionResult Create(Page page)
{
if (ModelState.IsValid)
{
db.Pages.Add(page);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ParentPageId = new SelectList(db.Pages, "ParentPageId", "Description", page.ParentPageId);
return View(page);
}
public ActionResult Edit(int id)
{
Page page = db.Pages.Find(id);
ViewBag.ParentPageId = new SelectList(db.Pages, "ParentPageId", "Description", page.ParentPageId);
return View(page);
}
[HttpPost]
public ActionResult Edit(Page page)
{
if (ModelState.IsValid)
{
db.Entry(page).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ParentPageId = new SelectList(db.Pages, "ParentPageId", "Description", page.ParentPageId);
return View(page);
}
}
注意ViewBag.ParentPageId饋送頁面列表,我並沒有在視圖中包含的代碼,因爲它的工作原理,如果我刪除翻譯的東西。
任何想法?
編輯:也許這對EF來說太複雜了?也許我應該改變我的見解。
你能發佈編輯控制器代碼嗎? – Tridus 2011-06-07 01:36:42
剛剛編輯,謝謝。 – noinstance 2011-06-07 01:40:12
您需要在您的模型類中聲明屬性爲虛擬 – 2011-06-07 03:13:32