簡體   English   中英

想要在asp .net mvc 3中更新表行

[英]Want to update table row in asp .net mvc 3

我的表中有2列名為CreatedOnModifiedOn 當然,在形式我不想顯示這兩個領域,即使在隱藏的領域。 當我發布相同的表單時,我想通過Current DateTime更改ModifiedOn並希望保持CreatedOnCreatedOn 但由於我沒有隱藏的文件名CreatedOn,因此它在數據庫中將其設置為null。 所以我然后使用下面的代碼

public ActionResult Edit(User user)
{ 
            if (ModelState.IsValid)
            {

                var OldInsObj = db.Users.Find(user.UserId);
                DateTime UsersDateCreated = (DateTime)db.Entry(OldInsObj).Property("UsersDateCreated").CurrentValue;

                user.UsersDateCreated = UsersDateCreated;

                user.UsersDateModified = DateTime.Now;

                db.Entry(user).State = EntityState.Modified;

                db.SaveChanges();
                return RedirectToAction("Index");
                }
}

我收到了這個錯誤

An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.

我怎么解決這個問題?

請不要給任何博客鏈接閱讀,我已經閱讀了其中一些但不能。

謝謝。

有幾種方法可以解決此問題。 您可以在附加新實例之前分離舊對象

public ActionResult Edit(User user)
{ 
        if (ModelState.IsValid)
        {
            var OldInsObj = db.Users.Find(user.UserId);
            DateTime UsersDateCreated = OldInsObj.UsersDateCreated;

            user.UsersDateCreated = UsersDateCreated;
            user.UsersDateModified = DateTime.Now;

            db.Entry(OldInsObj).State = EntityState.Detached;

            db.Entry(user).State = EntityState.Modified;

            db.SaveChanges();
            return RedirectToAction("Index");
        }
 }

您可以更新從數據庫檢索的實體實例。

public ActionResult Edit(int userId)
{ 
        var user = db.Users.Find(userId);

        if (TryUpdateModel(user))
        {                
            user.UsersDateCreated = UsersDateCreated;

            user.UsersDateModified = DateTime.Now;

            db.SaveChanges();
            return RedirectToAction("Index");
        }
 }

或者,您可以使用OldInsObjuser實例的值復制到OldInsObj實例。

public ActionResult Edit(User user)
{ 
        if (ModelState.IsValid)
        {
            var OldInsObj = db.Users.Find(user.UserId);
            DateTime UsersDateCreated = OldInsObj.UsersDateCreated;

            OldInsObj = Mapper.Map(user);

            OldInsObj.UsersDateCreated = UsersDateCreated;
            OldInsObj.UsersDateModified = DateTime.Now;

            db.SaveChanges();
            return RedirectToAction("Index");
        }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM