1

我对此比较陌生,但我仍然有点尴尬,因为这真的应该很简单......

我要做的就是更新数据库表中的现有行。我首先使用 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();
        }
4

2 回答 2

4

我已设法使用此 SO 帖子中提到的以下代码解决了此问题,该代码显示了如何仅保存新值:

db.Entry(activeCitizen).CurrentValues.SetValues(citizenDetails.ActiveCitizen);

请注意,我遇到了错误:“ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象”

这篇 SO 帖子帮助我克服了这个问题。

因此最终的代码是:

var currentCitizen = db.ActiveCitizen.Find(citizenDetails.ActiveCitizen.ID);
db.Entry(currentCitizen).CurrentValues.SetValues(citizenDetails.ActiveCitizen);
db.SaveChanges();
于 2012-12-18T12:41:50.843 回答
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();
    }
于 2012-12-18T12:47:20.533 回答