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
    Tham gia ngày:
    16/4/14
    Bài viết:
    1,024
    Đã được thích:
    80
    Điểm thành tích:
    48
    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

  2. admin
    Tham gia ngày:
    22/5/13
    Bài viết:
    4,878
    Đã được thích:
    1,193
    Đ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
    Tham gia ngày:
    16/4/14
    Bài viết:
    1,024
    Đã được thích:
    80
    Điểm thành tích:
    48
    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.
     
  4. SaporooVietNam
    Tham gia ngày:
    24/6/20
    Bài viết:
    18
    Đã được thích:
    0
    Điểm thành tích:
    3
    Giới tính:
    Nam
    bài viết rất hay và chi tiết. cảm ơn bạn đã chia sẻ bài viết này. mong bạn sẽ ra nhiều bài viết hữu ích hơn nữa để nhiều người biết đến bạn. chúc bạn ngày tốt lành
     
  5. dung0886876888
    Tham gia ngày:
    29/6/20
    Bài viết:
    58
    Đã được thích:
    2
    Điểm thành tích:
    18
    Giới tính:
    Nam
    Kiến thức bổ ích từ hàm 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 ạ
     


Chủ để tương tự : Lấy Entity
Diễn đàn Tiêu đề Date
Lập Trình Website MVC5 & MVC6 Lấy id mã máy tính duy nhất trọn bộ trong c# mvc asp.net 4/4/20
Lập Trình Website MVC5 & MVC6 Lấy giá trị Max và Min trong LINQ MVC C#, get value Min Max in LinQ MVC 2/3/20
Lập Trình Website MVC5 & MVC6 Lấy Action và Controller trong Global.asax trong MVC C# ASP.NET như thế nào? 24/9/18
Lập Trình Website MVC5 & MVC6 Lấy giá trị Html.CheckBox bằng Request.Form trong Controller MVC C# ASP.NET 7/8/18
Lập Trình Website MVC5 & MVC6 Lấy Id vừa Insert SaveChanges trước đó trong MVC C# Asp.Net Linq 31/7/18