我对此比较陌生,但我仍然有点尴尬,因为这真的应该很简单......
我要做的就是更新数据库表中的现有行。我首先使用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();
}
答案 0 :(得分:4)
我已设法使用this SO post中提到的以下代码解决了此问题,该代码显示了如何仅保存新值:
db.Entry(activeCitizen).CurrentValues.SetValues(citizenDetails.ActiveCitizen);
注意,我遇到了错误:“ObjectStateManager中已存在具有相同键的对象.ObjectStateManager无法跟踪具有相同键的多个对象”
This SO post帮助我克服了这个问题。
最终的代码是:
var currentCitizen = db.ActiveCitizen.Find(citizenDetails.ActiveCitizen.ID);
db.Entry(currentCitizen).CurrentValues.SetValues(citizenDetails.ActiveCitizen);
db.SaveChanges();
答案 1 :(得分:0)
试试这个
[HttpPost]
public ActionResult Edit(CitizenEntryViewModel citizenDetails)
{
ActiveCitizen activeCitizen = db.ActiveCitizen.SingleOrDefault(m => m.ID == citizenDetails.ActiveCitizen.ID);
if (activeCitizen != null)
{
UpdateModel(activeCitizen);
db.SaveChanges();
}