2010-11-11 30 views
29

Tôi đang sử dụng EF và khi tôi làm điều này:con Xóa các đối tượng trong Entity Framework

  foreach (var reg in detail.Regs) 
      { 
       this.db.Regs.DeleteObject(reg); 
      } 

tôi có được điều này:

Collection was modified; enumeration operation may not execute. 

tôi làm gì tôi sai ở đây ???

Trả lời

80

Lý do cho điều đó là bởi vì khi bạn xóa các đối tượng từ bối cảnh, EF đang tích cực cập nhật các Regs navigation đếm tài sản có nghĩa là detail.Regs bộ sưu tập đã được thay đổi trong suốt foreach vòng lặp mà luôn luôn gây ra ngoại lệ bạn đang nhận được.

Bạn có thể tạo một đối tượng bộ sưu tập mới và giữ xóa từ nó như thế này:

foreach (var reg in detail.Regs.ToList()) 
{ 
    this.db.Regs.DeleteObject(reg); 
} 

Hoặc thậm chí bạn có thể làm cho nó sạch bằng cách sử dụng LINQ ForEach phương pháp:

detail.Regs.ToList().ForEach(r => db.Regs.DeleteObject(r)); 
+0

cảm ơn bạn rất nhiều ... yo là một ngôi sao .... :) – Shaz

+0

Điều đó có được tất cả các hồ sơ từ cơ sở dữ liệu chỉ để họ xóa không? – Marco

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