2011-02-07 32 views
14

Tôi có một thực thể "Yêu cầu" với mối quan hệ 1 .. * với thực thể "RequestProperty". Vì vậy, có một bộ sưu tập các đối tượng RequestProperty trong "Yêu cầu". Khi tôi cập nhật một "Yêu cầu", tôi muốn xóa tất cả các mục trong RequestProperty EntityCollection và thêm các mục mới từ đối tượng miền đến. Khi tôi lặp lại bộ sưu tập Request.Properties và gọi loại bỏ hoặc DeleteObject trên mục, liệt kê không thành công vì bộ sưu tập đã được sửa đổi.Entity Framework 4 Xóa đối tượng khỏi bộ sưu tập thực thể

Tính đến bây giờ tôi đang làm điều này:

while (true) 
{ 
    if (newRequest.Properties.Count > 0) 
     context.RequestPropertySet.DeleteObject(newRequest.Properties.First()); 
    else 
     break; 
} 

Do đây là không thực sự "mát mẻ" Tôi nghĩ phải có một cách khác để trống một bộ sưu tập của một mối quan hệ. Cảm ơn bạn đã suy nghĩ của bạn.

Trả lời

19

Câu trả lời phụ thuộc vào cách bạn mô hình tổ chức của bạn. Nếu bạn đang sử dụng mối quan hệ độc lập chung hoặc quan hệ khóa ngoại, bạn sẽ phải sử dụng cách tiếp cận hiện tại của mình - tôi đang sử dụng nó cũng như trong dự án của tôi.

Nếu bạn đã xác định mối quan hệ xác định, bạn sẽ có thể gọi chỉ Clear trên bộ sưu tập dưới dạng @Craig được mô tả. Xác định quan hệ là mối quan hệ đặc biệt trong đó khóa chính của thực thể phụ thuộc chứa khóa ngoài của thực thể cha.

Example EF model

Ví dụ cho thấy Order thực thể và OrderItem thực thể có chìa khóa nước ngoài xác định mối quan hệ giữa chúng. Khóa chính của OrderItem bao gồm duy nhất IdOrderId là bảng FK của Order. Với cấu hình này, bạn không cần lặp lại thông qua OrderItem và xóa từng mục riêng biệt. Chỉ cần xóa OrderItem khỏi bộ sưu tập sẽ được thực hiện khi xóa trong cơ sở dữ liệu và bộ sưu tập xóa sẽ xóa tất cả OrderItem s liên quan trong cơ sở dữ liệu.

+0

Tôi đang cố gắng sử dụng cơ bản cùng một cấu trúc mô hình như Order <-association-> OrderItem ở trên, mà không thành công. Tôi tiếp tục nhận được lỗi sau khi chạy: Namespace.Models.OrderItem:: EntityType 'OrderItem' không có khóa được xác định. Xác định khóa cho EntityType này. OrderItem: EntityType: EntitySet 'OrderItems' dựa trên loại 'OrderItem' không có khóa được xác định. Sự khác biệt chính là tôi không có bất kỳ thuộc tính không khóa nào trong OrderItem. – user1003221

1

Sử dụng các phương pháp Clear():

newRequest.Properties.Clear(); 
+1

Sẽ không hoạt động vì cột khóa ngoài trên bảng RequestProperty không thể rỗng. Tôi đoán tôi có thể thay đổi điều đó và/hoặc thiết lập một thác trên xóa. – hoetz

+1

Trong trường hợp này bạn nên * thiết lập một thác trên xóa, IMHO. –

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