我是比較新的,但我還是有點不好意思,因爲這確實應該是簡單...MVC 4,EF 5周的SaveChanges不更新數據庫
所有我想要做的就是更新數據庫表中的現有行。我先使用EF(5我相信)代碼。
對於MVC 3我用這個方法(它的工作):
ReportCommon reportcommon = db.ReportCommon.Single(r => r.ReportCommonId == id);
reportcommon.IP = StaticUtilities.GetIPAddress();
db.ObjectStateManager.ChangeObjectState(reportcommon, EntityState.Modified);
db.SaveChanges();
我已經試過了,我發現了幾個例子,雖然他們沒有錯誤的數據庫沒有更新。 ..
[HttpPost]
public ActionResult Edit(CitizenEntryViewModel citizenDetails)
{
ActiveCitizen activeCitizen = db.ActiveCitizen.SingleOrDefault(m => m.ID == citizenDetails.ActiveCitizen.ID);
if (activeCitizen != null)
{
citizenDetails.ActiveCitizen.CitizenUpdatedRecordOn = DateTime.Now;
// Fields we don't edit but still need to pass back
citizenDetails.ActiveCitizen.PublicID = activeCitizen.PublicID;
citizenDetails.ActiveCitizen.IsKIN = activeCitizen.IsKIN;
activeCitizen = citizenDetails.ActiveCitizen;
db.SaveChanges();
}
沒有需要手動將對象狀態更改爲'modified'。模型中的IP屬性是否正確鏈接到數據庫? – Silvermind
您是否嘗試更改ori ginal'activeCitizen'對象的屬性並保存?或者在'db.SaveChanges();'之前調用'db.ObjectStateManager.ChangeObjectState(activeCitizen,EntityState.Modified);'' – Zabavsky
謝謝。 Silvermind,第一個代碼示例是在一段時間後從MVC 3項目中獲得的。 Zabavsky,我嘗試了將狀態更改爲「修改」的方法,但我似乎無法訪問ObjectStateManager。 VS Express 2012說:'ActiveCitizenSystem.Models.ACSEntities'不包含ObjectStateManager的定義。我確實有命名空間條目:'using System.Data.Objects;' – ChrisCurrie