Câu trả lời sau đây đề cập đến Database-First hoặc Model-Đầu workflow (hai công việc duy nhất mà đã có sẵn với Entity Framework (phiên bản < = 4.0) khi câu hỏi được hỏi). Nếu bạn đang sử dụng Mã đầu tiên quy trình làm việc (có sẵn từ phiên bản EF> = 4.1), hãy chuyển đến câu hỏi này để có giải pháp đúng cho số answer của ssmith.
Các tập tin edmx có trong định nghĩa <ConceptualModel>
và <EntityContainer>
một thuộc tính để tải lười biếng, nơi bạn có thể thiết lập tải lười biếng thường false:
<EntityContainer Name="MyEntitiesContext" annotation:LazyLoadingEnabled="false">
Điều này tạo ra các thiết lập sau đây trong constructor ObjectContext:
public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext")
{
this.ContextOptions.LazyLoadingEnabled = false;
OnContextCreated();
}
Ví dụ của tôi không có nghĩa là cách tạo ra ObjectContext
(hoặc)trong phiên bản EF mới hơn) nên được chỉnh sửa thủ công (sẽ được ghi đè lên với mọi cập nhật mô hình từ cơ sở dữ liệu, như ctorx đã chỉ ra) nhưng phần tử EntityContainer
trong phần edmx:ConceptualModels
của tệp EDMX phải được chỉnh sửa bằng cách thêm thuộc tính annotation:LazyLoadingEnabled="false"
- hoặc bằng tay trong trình soạn thảo XML hoặc trên trang thuộc tính của bề mặt thiết kế, nơi tùy chọn này có sẵn. Sửa đổi này của tập tin EDMX sẽ tự động tạo ra các lớp bối cảnh với các tùy chọn tải lười biếng bị vô hiệu hóa trong constructor như được hiển thị ở trên. Bản sửa đổi tệp EDMX không bị ghi đè khi mô hình được cập nhật từ cơ sở dữ liệu.
Hoàn hảo, cảm ơn. –
Điều này yêu cầu bạn sửa đổi mã được tạo, mã sẽ bị ghi đè nếu bạn sửa đổi mô hình của mình. Xem xét đặt một ObjectContextFactory tại chỗ, và thực hiện thay đổi trong nhà máy. Bằng cách đó, bạn vẫn chỉ thiết lập tùy chọn một lần và bạn không thay đổi mã được tạo tự động. – ctorx
@ctorx - AFAICT là một lựa chọn đơn giản hơn so với nhà máy sẽ chỉ thực hiện một phần OnContextCreated để tắt tải xuống? Hay tôi đang thiếu một cái gì đó? –