我需要設置一個EntityObject的EntityKey。我知道它的類型和它的id值。我不想不必要地查詢數據庫。EntityKey和ApplyPropertyChanges()
這工作...
//
// POST: /Department/Edit/5
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Guid id, Department Model)
{
Model.EntityKey = (from Department d in db.Department
where d.Id == id
select d).FirstOrDefault().EntityKey;
db.ApplyPropertyChanges(Model.EntityKey.EntitySetName, Model);
db.SaveChanges();
return RedirectToAction("Index");
}
這種失敗...
//
// POST: /Department/Edit/5
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Guid id, Department Model)
{
String EntitySetName = db.DefaultContainerName + "." + Model.GetType().Name;
Model.EntityKey = new System.Data.EntityKey(EntitySetName, "Id", Model.Id);
db.ApplyPropertyChanges(Model.EntityKey.EntitySetName, Model);
db.SaveChanges();
return RedirectToAction("Index");
}
的ApplyPropertyChanges()線失敗與此異常:
的ObjectStateManager不 包含一個ObjectStateEntry和一個 參考 'Sample.Models.Department'類型的對象。
這兩個EntityKeys是相等的。爲什麼第二塊代碼失敗?我該如何解決它?
+1爲擴展方法。太棒了! =)如果表使用多列PK,該方法將如何改變? – 2009-05-22 23:15:57
您需要重載使用IEnumerable KeyValuePair指定鍵的擴展方法,然後在EntityKey上調用相應的構造函數重載。爲了保持stype安全並避免在你的KeyValuePair中傳入字符串,你可以傳遞一組'key-finding'委託和值以放入關鍵字。 – 2009-05-23 08:30:10