Tôi hiểu sự thất vọng của OP, việc sử dụng ảo này không dành cho sự trừu tượng hóa theo khuôn mẫu mà công cụ sửa đổi ảo defacto có hiệu quả.
Nếu bất kỳ ai vẫn đang vật lộn với điều này, tôi sẽ đưa ra quan điểm của mình, vì tôi cố gắng giữ cho các giải pháp đơn giản và biệt ngữ ở mức tối thiểu:
Entity Framework trong một phần đơn giản sử dụng tải lười biếng, tương đương với việc chuẩn bị một cái gì đó để thực hiện trong tương lai. Điều đó phù hợp với công cụ sửa đổi 'ảo', nhưng có nhiều thứ hơn thế.
Trong Entity Framework, sử dụng thuộc tính điều hướng ảo cho phép bạn biểu thị nó là tương đương với Khóa ngoài không thể rỗng trong SQL. Bạn KHÔNG Háo hức tham gia mọi bảng có khóa khi thực hiện truy vấn, nhưng khi bạn cần thông tin - nó sẽ trở thành nhu cầu.
Tôi cũng đã đề cập đến nullable vì ban đầu nhiều thuộc tính điều hướng không liên quan. tức là trong kịch bản khách hàng / đơn hàng, bạn không phải đợi đến thời điểm đơn hàng được xử lý để tạo khách hàng. Bạn có thể, nhưng nếu bạn có một quy trình gồm nhiều giai đoạn để đạt được điều này, bạn có thể thấy cần phải duy trì dữ liệu khách hàng để hoàn thành sau này hoặc triển khai các đơn đặt hàng trong tương lai. Nếu tất cả các thuộc tính điều hướng đã được triển khai, bạn phải thiết lập mọi Khóa ngoại và trường quan hệ khi lưu. Điều đó thực sự chỉ đặt dữ liệu trở lại vào bộ nhớ, đánh bại vai trò của sự bền bỉ.
Vì vậy, mặc dù có vẻ khó hiểu khi thực thi thực tế vào thời gian chạy, tôi đã tìm thấy quy tắc tốt nhất để sử dụng là: nếu bạn xuất dữ liệu (đọc vào Mô hình xem hoặc Mô hình nối tiếp) và cần các giá trị trước khi tham chiếu, đừng sử dụng ảo; Nếu phạm vi của bạn đang thu thập dữ liệu có thể không đầy đủ hoặc cần tìm kiếm và không yêu cầu mọi tham số tìm kiếm đã hoàn thành cho tìm kiếm, mã sẽ sử dụng tốt tham chiếu, tương tự như sử dụng thuộc tính giá trị null? Dài?. Ngoài ra, trừu tượng hóa logic kinh doanh của bạn từ bộ sưu tập dữ liệu của bạn cho đến khi cần tiêm nó có nhiều lợi ích về hiệu suất, tương tự như khởi tạo một đối tượng và bắt đầu nó ở mức null. Entity Framework sử dụng rất nhiều phản xạ và động lực, có thể làm giảm hiệu suất và nhu cầu phải có một mô hình linh hoạt có thể mở rộng theo yêu cầu là rất quan trọng để quản lý hiệu suất.
Đối với tôi, điều đó luôn có ý nghĩa hơn là sử dụng các thuật ngữ công nghệ quá tải như proxy, đại biểu, xử lý và như vậy. Một khi bạn nhấn lang lập trình thứ ba hoặc thứ tư, nó có thể trở nên lộn xộn với những thứ này.