Tôi đã sử dụng rất nhiều Khuôn khổ thực thể trong một ứng dụng MVVM WPF gần đây và tôi gặp phải một số vấn đề. Để hiển thị dữ liệu, các mô hình xem của tôi đang sử dụng ObjectContext có thời lượng ngắn. Các mô hình xem này sẽ được sử dụng trong một quy trình chạy dài, do đó tôi thích sử dụng ObjectContext ngắn để không làm giảm hiệu suất.Khuôn khổ thực thể không theo dõi thay đổi bộ sưu tập khi kết nối lại một thực thể
Vì vậy, về cơ bản nó có nghĩa là các thực thể của tôi được tiêu thụ ở chế độ ngắt kết nối. Những entites này có thể được tạo, xem, cập nhật và xóa. Tôi không gặp vấn đề gì khi lưu các thay đổi về cơ sở dữ liệu bằng chế độ ngắt kết nối. Nhưng tôi đã tìm thấy một trường hợp cụ thể trong đó các thay đổi không được lưu mà không có lỗi hiển thị khi gọi phương thức SaveChanges()
. Điều này xảy ra khi tôi cố cập nhật một thực thể có thuộc tính sưu tập. Thuộc tính vô hướng của thực thể được duy trì mà không có vấn đề nhưng thay đổi về bộ sưu tập không được phản ánh vào cơ sở dữ liệu, như thể nếu nó không thể theo dõi những thay đổi này khi kết nối lại.
Đây là mã mẫu của trường hợp của tôi, nơi tôi thay đổi tên đối tượng và sau đó thêm một đối tượng vào bộ sưu tập báo cáo của nó. Sau SaveChanges()
, chỉ tên khách hàng mới được phản ánh trên cơ sở dữ liệu.
this.Client.Name = "Test Client";
this.Client.Reports.Add(new Report { Name = "Test Report" });
using (ReportCompositionEntities entities = new ReportCompositionEntities(this.connectionStringName))
{
entities.Clients.ApplyCurrentValues(this.Client);
entities.SaveChanges();
}
Vì vậy, tôi đang làm điều gì sai hoặc EF đơn giản là không thể theo dõi loại thay đổi này khi kết hợp lại một thực thể?
Trường hợp thực sự thú vị. Bây giờ thực tế EF không cập nhật những thay đổi này có ý nghĩa vì thực thể thuộc tính điều hướng cũng có thể được tham chiếu bởi một thực thể khác. Không có vấn đề khi một thực thể mới được tạo ra nhưng các vấn đề đồng thời có thể xảy ra với việc xóa. Trong kiến trúc của tôi, mỗi MVVM là một sự hỗ trợ duy nhất của mô hình CRUD. Tôi đã chuyển VM của mình sang chế độ kết nối (quá trình xử lý được xử lý ra khỏi hộp bởi kiến trúc của tôi) và cấu hình bộ nhớ không tiết lộ bất kỳ vấn đề nào ngay bây giờ. Thời gian sẽ nói và nó thực sự khá dễ dàng để quay trở lại chế độ ngắt kết nối. Cảm ơn bạn đã giúp đỡ. – Ucodia