2015-12-05 17 views
5

mã kiểm tra của tôi:EF - Cập nhật nhiều hàng trong cơ sở dữ liệu mà không cần sử dụng foreach vòng lặp

using (var db = new MyDbContext()) 
{ 
    string fromUser = ""; //sender 
    string toUser = ""; //receiver 

    var messages = db.Message.Where(x => x.FromUser == fromUser && x.ToUser == toUser) 
       .ToList(); 

    foreach (var message in messages) 
    { 
    message.IsRead = true; 
    db.SaveChanges(); 
    } 
} 

Câu hỏi của tôi: là có một cách khác để cập nhật cơ sở dữ liệu mà không cần sử dụng foreach vòng lặp trong trường hợp đó?

p/s: Tôi muốn được tham khảo những câu hỏi này nhưng tất cả trong số họ đã không giải quyết vấn đề của tôi:

+0

Di chuyển 'SaveChanges()' bên ngoài vòng lặp 'for' –

Trả lời

16

Bạn không cần phải d để SaveChanges() trên mỗi lần lặp. Điều đó sẽ nhấn cơ sở dữ liệu nhiều lần. Hãy thử:

using (var db = new MyDbContext()) 
{ 
    string fromUser = ""; //sender 
    string toUser = ""; //receiver 
    var messages = db.Message.Where(x => x.FromUser == fromUser && x.ToUser == toUser) 
       .ToList(); 
    messages.ForEach(m => m.IsRead = true); 
    db.SaveChanges(); 
} 
+0

Cảm ơn bạn! Đó là sự giúp đỡ :) –

+0

Tạo một danh sách và lambda chỉ để gọi một phương thức mà nội bộ là một vòng lặp. Người điên. –

+0

Vâng, điểm lớn hơn chắc chắn là cuộc gọi cơ sở dữ liệu duy nhất. Một số sẽ cho rằng lambda trông sạch hơn (đó là một tái cấu trúc được khuyến nghị tái cấu trúc lại). Crazy là một IMO khắc nghiệt. –

Các vấn đề liên quan