Tôi đang ở giữa sự phát triển của một ứng dụng WPF đang sử dụng Entity Framework (.NET 3.5). Nó truy cập các thực thể ở nhiều nơi trong suốt. Tôi lo lắng về tính nhất quán trong suốt ứng dụng liên quan đến các thực thể. Tôi có nên xây dựng bối cảnh riêng biệt trong các quan điểm khác nhau của mình hay tôi nên (và là một cách hay để thực hiện điều này), ví dụ một bối cảnh duy nhất có thể được truy cập trên toàn cầu? Ví dụ, mô hình thực thể của tôi có ba phần, lô hàng (với gói con và nội dung con thêm), Công ty/Danh bạ (có địa chỉ và điện thoại con) và thông số đĩa. Các giao diện của lô hàng và EditShipment truy cập vào DiskSpecs, và OptionsView quản lý DiskSpecs (Tạo, Chỉnh sửa, Xóa). Nếu tôi chỉnh sửa một DiskSpec, tôi phải có một cái gì đó trong ShipmentsView để lấy các thông số kỹ thuật mới nhất nếu tôi có bối cảnh riêng biệt phải không?Khung thực thể toàn cầu Ngữ cảnh trong ứng dụng WPF
Nếu an toàn để có một bối cảnh tổng thể mà từ đó phần còn lại của ứng dụng truy xuất đối tượng của nó, thì tôi tưởng tượng đó là con đường để đi. Nếu vậy, trường hợp đó sẽ được đặt ở đâu? Tôi đang sử dụng VB.NET, nhưng tôi có thể dịch từ C# khá tốt. Bất kỳ trợ giúp sẽ được đánh giá cao.
Tôi chỉ không muốn một trong những ứng dụng mà người dùng phải nhấn tải lại hàng tá lần trong các phần khác nhau của ứng dụng để nhận dữ liệu mới.
Cập nhật:
OK vì vậy tôi đã thay đổi ứng dụng của tôi như sau:
- Tất cả bối cảnh được tạo ra trong Sử dụng khối để xử lý trong số họ sau khi họ không còn cần thiết.
- Khi được tải, tất cả các thực thể sẽ bị xóa khỏi ngữ cảnh trước khi được xử lý.
- Một thuộc tính mới trong MainViewModel (ContextUpdated) đặt ra một sự kiện mà tất cả các ViewModels khác đăng ký để chạy phương thức ViewModels RefreshEntities đó.
- Sau khi triển khai điều này, tôi bắt đầu nhận được lỗi nói rằng một thực thể chỉ có thể được tham chiếu bởi một ChangeTracker tại một thời điểm. Vì tôi không thể tìm ra bối cảnh nào vẫn đang tham chiếu đến thực thể (không phải là bất kỳ ngữ cảnh nào?) Tôi đưa đối tượng là IEntityWithChangeTracker và đặt SetChangeTracker thành không có gì (Null).
Điều này đã cho vấn đề hiện tại: Khi tôi Null changeTracker trên thực thể, sau đó đính kèm nó vào một ngữ cảnh, nó mất trạng thái đã thay đổi và không được cập nhật vào cơ sở dữ liệu. Tuy nhiên, nếu tôi không thay đổi trình theo dõi thay đổi, tôi không thể đính kèm. Tôi có mã theo dõi thay đổi của riêng mình, vì vậy đó không phải là vấn đề.
Câu hỏi mới của tôi là, bạn phải làm như thế nào. Một ví dụ tốt Thực thể truy vấn và thực thể lưu mã bị mất sẽ đi một chặng đường dài, bởi vì tôi đang đập đầu của tôi trong cố gắng để có được những gì tôi từng nghĩ là một giao dịch đơn giản để làm việc.
Nếu bạn downvote, tôi rất thích một lời giải thích. Ít nhất nó sẽ cho tôi biết những gì không làm tiếp tục xuống đường. – CodeWarrior