Search code examples
.netasp.net-mvcentity-frameworkinsert-update

Why does not my code update in Entity Framework?


Hello I am new programmer in .Net MVC. Do you think Where do I make mistake ? My Codes don't update my data. Could you help me at this issue ?

 public class MemberModel
{
    public int UserID { get; set; }
    public string UserName { get; set; }
    public string UserSurname { get; set; }
    public string UserPassword { get; set; }
    public string UserEmail { get; set; }
}

public class UserinfoModel
    {
        public int UserInfoID { get; set; }
        public Nullable<System.DateTime> DateOfBirth { get; set; }
        public string PhoneNumber { get; set; }
        public string Adress { get; set; }
        public byte[] UserImage { get; set; }
        public Nullable<int> fk_GenderID { get; set; }
        public Nullable<int> fk_UserID { get; set; }

        public virtual tbl_Gender tbl_Gender { get; set; }
        public virtual tbl_Member tbl_Member { get; set; }
    }

If I write db.tbl_Userinfo.Add(userinfo) , it addes a new record in my database.I did not understand where error is.

---Class Part--

 public ActionResult Edit()
        {
            var dataSet = Session["Users"] as tbl_Member;
             var member = db.tbl_Userinfo.FirstOrDefault(m => m.fk_UserID == dataSet.UserID);
             var change = new UserinfoModel();
             change.UserInfoID = member.UserInfoID;
             change.Adress = member.Adress;
             change.DateOfBirth = member.DateOfBirth;
             change.PhoneNumber = member.PhoneNumber;
             change.UserImage = member.UserImage;
             change.fk_UserID = member.fk_UserID;
             ViewBag.fk_GenderID = new SelectList(db.tbl_Gender, "GenderID", "Gender");


            return View(change);

        }
        [HttpPost]
        public ActionResult Edit(UserinfoModel Userinfo)
        {
            var userinfo = new tbl_Userinfo();

            userinfo.Adress = Userinfo.Adress;
            userinfo.DateOfBirth = Userinfo.DateOfBirth;
            userinfo.PhoneNumber = Userinfo.PhoneNumber;
            userinfo.UserImage = Userinfo.UserImage;
            userinfo.fk_GenderID = Userinfo.fk_GenderID;
            db.SaveChanges(); /* it does not work.*/
            return RedirectToAction("Show"); /* is it true?
        }


    }

Solution

  • You need to update a row that is attached to the data context or add a new one.

    I'm including the Edit code since that's what your controller actions say. If you want to create a whole new row, you need to add the record your DbSet<> before calling SaveChanges().

    [HttpPost]
    public ActionResult Edit(UserinfoModel Userinfo)
    {
        var dataSet = Session["Users"] as tbl_Member;
        var member = db.tbl_Userinfo.FirstOrDefault(m => m.fk_UserID == dataSet.UserID);
    
        member.Adress = Userinfo.Adress;
        member.DateOfBirth = Userinfo.DateOfBirth;
        member.PhoneNumber = Userinfo.PhoneNumber;
        member.UserImage = Userinfo.UserImage;
        member.fk_GenderID = Userinfo.fk_GenderID;
        db.SaveChanges(); 
        return RedirectToAction("Show");
    }