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:
    624
    Đã được thích:
    48
    Đ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,265
    Đã được thích:
    1,034
    Đ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:
    624
    Đã được thích:
    48
    Đ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.
     


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

Like và Share ủng hộ ITSEOVN