Lấy Entity Value old cũ sau đó Update không bị lỗi Asp.net MVC

Thảo luận trong 'Lập Trình Website MVC5 & MVC6' bắt đầu bởi seolagi, 27/3/20.

  1. seolagi

    seolagi

    Vip Member

    Tham gia ngày:
    16/4/14
    Bài viết:
    649
    Đã được thích:
    49
    Điểm thành tích:
    28
    HI mọi người. Mình thực hiện lệnh update dữ liệu bảng product, trước khi thực hiện update mình có select ra giá trị của product cũ để so sánh giữa 2 phiên bản save xuống có khác nhau gì không để thực hiện xử lý dữ liệu.
    Khi update thì bị lỗi db.SaveChanges() không save được.

    Mã:
     public ActionResult Update(Product model)
    {
         var ProductCodeOld = db.Products.Where(p => p.Id == model.Id).FirstOrDefault().ProductCode;
         ......
         //thực hiện update thì bị lỗi
         dbc.Entry(model).State = System.Data.Entity.EntityState.Modified;
         dbc.SaveChanges();
         ModelState.Clear();
    }
    
     
    Cảm ơn đã xem bài:

    Lấy Entity Value old cũ sau đó Update không bị lỗi Asp.net MVC

    danh sách diễn đàn rao vặt gov chất lượng
  2. admin

    admin Phạm Công Sơn Thành viên BQT

    Tham gia ngày:
    22/5/13
    Bài viết:
    4,284
    Đã được thích:
    1,039
    Điểm thành tích:
    113
    Giới tính:
    Nam
    Bạn thử sửa code lại như sau nhé:
    Mã:
     public ActionResult Update(Product model)
    {
         var ProductCodeOld = db.Products.AsNoTracking().Where(p => p.Id == model.Id).FirstOrDefault().ProductCode;
         ......
         //thực hiện update thì bị lỗi
         dbc.Entry(model).State = System.Data.Entity.EntityState.Modified;
         dbc.SaveChanges();
         ModelState.Clear();
    }
    
    • Ở đây bạn thêm AsNoTracking() vào nghĩa là: banjd dang nói với Emtity Framework rằng không cần theo dõi kết quả của truy vấn, và không cần xử lý lưu trữ bổ sung các giá trị được trả về.
    Sự khác biết giữa dùng AsNoTracking() và không dùng AsNoTracking() khi truy xuất.
    • Nếu bạn có AsNoTracking(): nghĩa là dữ liệu được truy xuất không bị theo dõi bởi ngữ cảnh nên khi bạn lưu dữ liệu trở lại cơ sở dữ liệu, bạn phải đính kèm và đặt trạng thái chính xác của dữ liệu để EF biết rằng nên cập nhật dự liệu hiện tại thay vì chèn một cái mới.
    • Nếu bạn không sử dụng AsNoTracking(): bạn không cần phải đính kèm, đổi trạng thái, thay đổi dữ liệu tất cả. Vì cơ chế theo dõi xử lý trong Emtity Framework đã làm mọi việc cho bạn.
     
    Chỉnh sửa cuối: 27/3/20
    seolagi thích bài này.
  3. seolagi

    seolagi

    Vip Member

    Tham gia ngày:
    16/4/14
    Bài viết:
    649
    Đã được thích:
    49
    Điểm thành tích:
    28
    Kiến thức bổ ích từ hàm AsNoTracking() mà mình không biết, bị cái này hoài, giờ đã biết cách xử lý, cảm ơn ad rất nhiều.
     


Like và Share ủng hộ ITSEOVN