2012-08-22 32 views
8

Tôi đang sử dụng EF 5 với Mã đầu tiên. Tôi có một lớp học mà tôi muốn luôn mong muốn tải một số tài sản. Tôi đã gỡ bỏ các ảo từ khóa nhưng nó không phải háo hức tải:Mã EF Lần đầu tiên háo hức tải

public class Person 
{ 
    public ICollection<Email> Emails { get; set; } 
    public Profile Profile {get;set;} 
} 

Vì vậy, bằng cách tắt tải lười biếng, nó sẽ không tự động tải háo hức phải không? Nếu vậy, làm thế nào để lưu trữ mà không sử dụng Include()?

Cảm ơn!

Trả lời

18

Không, tắt tải chậm bằng cách xóa từ khóa virtual sẽ không tự động bật tải mong muốn. Bạn phải Include sự liên quan Entity hoặc Collection như vậy:

var personWithProfile = ctx.People.Include(x => x.Profile).First(); 
var personWithProfileAndEmails = ctx.People. 
              .Include(x => x.Profile) 
              .Include(x => x.Emails) 
              .First(); 

Đây là một chi lớn từ blog của nhóm phát ADO.NET: http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx

+0

Cảm ơn bạn đã liên kết và nó rất hữu ích. Tôi biết lệnh Bao gồm. Nhưng không có cách nào để buộc tải mong muốn trong định nghĩa lớp POCO (hoặc tệp ánh xạ) phải không? – Calvin

+1

Không, bạn muốn nói rõ ràng với EF khi muốn tải dữ liệu một cách rõ ràng. Nếu bạn không và EF chỉ bao gồm tất cả các thực thể liên quan sẽ có vấn đề hiệu suất lớn. Về cơ bản, mỗi câu lệnh include đều dịch thành một 'bên trong' và truy vấn sẽ chọn tất cả các cột trong bảng đã nối kết. – Paul

+0

Cảm ơn bạn đã làm rõ! – Calvin

Các vấn đề liên quan