2012-02-23 20 views
22

Tôi hiện đang sử dụng EF 4.0. Mục tiêu của tôi là xóa một bộ sưu tập con và thêm bộ sưu tập mới vào cùng một cha mẹ.Bộ sưu tập khung thực thể đã được sửa đổi; hoạt động điều tra có thể không thực thi

public void AddKids(int parentId, Kids newKids) 
{ 
    using (ModelContainer context = new ModelContainer(connectionString)) 
    { 
     using (TransactionScope scope = new TransactionScope()) 
     { 
      var query = from Parent _parent in context.Parents 
         where _parent.ParentId == parentId select _parent; 

      Parent parent = query.Single(); 
      while (parent.Kids.Any()) 
      { 
       context.Kids.DeleteObject(parent.Kids.First()); 
      } 

      if (newKids != null) 
      { 
       foreach (Kid _kid in newKids) 
       { 
        parent.Kids.Add(new Kid 
        { 
         Age = _kid.Age, 
         Height = _kid.Height 
        }); 
       } 
      } 
      scope.Complete(); 
     } 
     context.SaveChanges(); //Error happens here 
    } 
} 

Lỗi này là từ tiêu đề: Bộ sưu tập đã được sửa đổi; hoạt động điều tra có thể không thực hiện được.

Mọi trợ giúp sẽ được đánh giá cao.

+1

Bạn xác định newKids ở đâu? –

+0

@JustinNiessner: Cảm ơn bạn, tôi đã chỉnh sửa câu hỏi của mình. – madatanic

+1

Bây giờ tôi cũng tự hỏi cha mẹ được định nghĩa ở đâu. –

Trả lời

42

Bạn đang thấy điều này vì bạn xóa các đối tượng khỏi bộ sưu tập hiện có các hoạt động đang hoạt động. Cụ thể hơn, bạn đang cập nhật bộ sưu tập Kids và sau đó thực thi toán tử Any() trên nó trong vòng lặp while. Đây không phải là một hoạt động được hỗ trợ khi làm việc với các phiên bản IEnumerable. Những gì tôi có thể khuyên bạn nên làm là viết lại thời gian của bạn như sau:

parent.Kids.ToList().ForEach(r => context.Kids.DeleteObject(r)); 

Tôi hy vọng điều đó sẽ hữu ích.

+1

Tôi đã thử phương pháp của bạn cũng như với cùng một lỗi. Sau một vài giờ đào, nó bật ra các mã đăng làm việc tốt. Tôi phát hiện ra vấn đề của mình với việc sửa đổi bộ sưu tập "Trẻ em" sau này trong tiến trình. Cảm ơn vì sự giúp đỡ. – madatanic

+1

Tôi vui vì tôi đã giúp. Chúc may mắn với dự án của bạn. – ScorpiAS

+0

Hoàn hảo! Điều này đã giúp tôi - cảm ơn rất nhiều. –

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