Chúng tôi đang viết một ứng dụng WPF bằng cách sử dụng khung Entity (Silverlight với các dịch vụ RIA chính xác). Chúng tôi đang sử dụng một ObjectContext được chia sẻ thông qua ứng dụng để chúng tôi có thể hưởng lợi từ việc chia sẻ dữ liệu trên các mô-đun.Entity Framework ObjectContext trong windows/WPF/ứng dụng Silverlight
Vấn đề là - nếu người dùng trong công việc của mình mở ra, giả sử bán hàng lịch sử, nó được tải vào ObjectContext và ở đó cho đến khi kết thúc ứng dụng. Vì vậy, một mô hình khác nên được sử dụng.
Tôi biết rằng ObjectContexts nên được sử dụng làm Đơn vị hoạt động đơn lẻ. Nhưng sau đó, làm thế nào để bạn cho các phần khác của ứng dụng biết rằng một cái gì đó đã thay đổi và họ nên tải lại dữ liệu của họ?
Chỉnh sửa: Ok, EventAggregator, nhưng sau đó, điều này sẽ khiến tất cả các phần khác tải lại dữ liệu của chúng (có thể trùng lặp nhiều). Cũng có lẽ nhiều sự kiện sẽ là cần thiết cho tất cả các loại nhóm tham gia.
Bạn giải quyết những vấn đề này như thế nào? Giải pháp hiện tại của tôi là một loại thỏa hiệp - sử dụng một ObjectContext được chia sẻ cho dữ liệu cốt lõi được sử dụng bởi toàn bộ appliaction để chúng có thể được chia sẻ và cập nhật tự động. Và đối với số lượng lớn dữ liệu, hãy sử dụng một ObjectContext riêng biệt mới. Bất kỳ ý tưởng tốt hơn?
Có cách nào để "giải phóng" các thực thể khỏi DataContext của họ sao cho bộ gom rác có thể thực hiện công việc của nó và giải phóng bộ nhớ?
Với ứng dụng này, chúng ta đang nói về Silverlight. Sử dụng Prism/Caliburn, tôi tin rằng nó không phải là một vấn đề để có một ObjectContext duy nhất cho mỗi lần xem (module?). Một lần nữa, vấn đề là gì nếu có rất nhiều dữ liệu được nạp cho khách hàng? Theo tôi bây giờ, giải pháp tốt nhất là tạo một ObjectContext được chia sẻ cho các thực thể cơ bản được sử dụng thông qua toàn bộ ứng dụng để chúng được đồng bộ hóa tự động và ObjectContexts riêng biệt để tải khối dữ liệu lớn. một số báo cáo lịch sử. – gius
Tôi sẽ không cố gửi các khối dữ liệu thực sự lớn tới khách hàng. Thay vào đó, tôi sẽ lọc trên máy chủ và chỉ trả lại kết quả mà khách hàng muốn xem tại thời điểm đó. Con người không thể đọc 100.000 hồ sơ, vì vậy đừng gửi nhiều thứ đó cho một con người. Thay vào đó, hãy để vấn đề tìm kiếm/lọc và chỉ gửi kết quả cho khách hàng. Nếu bạn đang xây dựng các báo cáo, hãy tạo dữ liệu tóm tắt tổng hợp trên máy chủ. Ví dụ, sẽ tốt hơn nếu tính doanh số bán hàng hàng tháng trên máy chủ và gửi một số duy nhất cho khách hàng hơn là để xem 5000 hồ sơ bán hàng. –
Đó là sự thật, nhưng nếu người dùng thấy bất cứ lúc nào trong suốt thời gian ứng dụng, hãy nói các trang 1, 10, 20, những dữ liệu đó sẽ vẫn nằm trong bộ nhớ. Mặt khác, bằng cách sử dụng một ObjectContext riêng biệt và phân trang dữ liệu có thể giải quyết vấn đề lớn dữ liệu-lưu-trong-bộ nhớ. – gius