Khi tôi đang cố gắng để xóa một bộ sưu tập (gọi .Clear
) tôi nhận được ngoại lệ sau đây:Một mối quan hệ ở trạng thái Deleted
Có lỗi xảy ra trong khi tiết kiệm thực thể mà không vạch trần tính chất chính nước ngoài cho các mối quan hệ của họ . Thuộc tính EntityEntries sẽ trả về null vì một thực thể đơn lẻ không thể được xác định là nguồn của ngoại lệ. Xử lý các ngoại lệ trong khi tiết kiệm có thể được thực hiện dễ dàng hơn bằng cách phơi bày các thuộc tính khóa ngoài trong các loại thực thể của bạn. Xem InnerException để biết chi tiết.
Trường hợp ngoại lệ bên trong là:
Một mối quan hệ từ 'User_Availability' AssociationSet là trong 'Deleted' nhà nước. Với các ràng buộc bội số, một 'User_Availability_Target' tương ứng cũng phải ở trạng thái 'Đã xóa'.
tài trông như thế này:
....
ICollection<Availability> Availability { get; set; }
Availability trông như thế này:
int ID { get; set; }
User User { get; set; }
DateTime Start { get; set;
DateTime End { get; set; }
Cấu hình như sau:
HasMany(x => x.Availability).WithRequired(x => x.User);
HasRequired(x => x.User).WithMany(x => x.Availability);
Mã gây ra vấn đề là:
user.Availability.Clear();
Tôi đã xem các lựa chọn thay thế khác như sử dụng DbSet để xóa mục, nhưng tôi không cảm thấy mã của mình sẽ sạch sẽ. Có cách nào để thực hiện điều này bằng cách xóa bộ sưu tập không?
Cảm ơn Slauma, đã giải quyết được vấn đề của tôi. – Sam
Cảm ơn bạn đã đăng bài này! Khi tôi chạy một bản cập nhật trên đối tượng con, tôi nhận được nhiều câu lệnh SET trên cùng một cột, do thuộc tính FK và thuộc tính điều hướng. Có một mẹo để chỉ tạo ra một tuyên bố SET? – Thomas
@Thomas: Tôi không có đầu mối. SQL thế hệ là khá nhiều trong tay của EF và khó kiểm soát. Tôi thực sự ngạc nhiên khi bạn nhận được hai biểu thức SET cho cùng một cột FK. EF nên biết rằng tài sản FK và nav. tài sản đại diện cho cùng một cột FK và mối quan hệ. – Slauma