2012-05-17 18 views
5

LazyLoadingEnabled được đặt cụ thể thành true để ngăn các thực thể liên quan tải trong ngữ cảnh tôi đang sử dụng.DBContext lazyloadingenabled được đặt thành true vẫn tải các thực thể liên quan theo mặc định

Một lớp thuốc có danh sách các đối tượng thuốc trong đó.

public class Drug 
{ 
    public virtual List<DrugIdentity> DrugIdentities { get; set; } 
} 

Cấu hình cụ thể cho lớp này đặt mối quan hệ then chốt và quan hệ nếu tôi muốn bao gồm thực thể liên quan được tải.

public DrugConfiguration() 
    { 
     this.HasKey(d => d.DrugID); 
     this.HasMany(d => d.DrugIdentities).WithOptional(d => d.Drug).Map(d => d.MapKey("DrugID")); 
    } 

Khi ngữ cảnh ma túy được tải bằng truy vấn LINQ, đối tượng hiển thị nó có chứa DrugIdentities liên quan khi nó không nên.

context.Configuration.LazyLoadingEnabled = true; 

        var drugs = from d in context.Drug 
           where d.Active == true 
           select d; 

thuốc [0] .DrugIdentities Đếm = 1

Tôi mong chờ thuốc [0] .DrugIdentities để NULL bằng từ lazyloading được thiết lập là true?

+6

Bạn có vẻ hiểu nhầm việc tải xuống chậm hơn so với thực tế. Tải xuống có nghĩa là dữ liệu của bạn ** được ** tự động tải khi bạn truy cập thuộc tính điều hướng. ** đối diện của điều này, mong muốn tải, là khi bạn nhận được null cho thuộc tính quan hệ của bạn trừ khi bạn rõ ràng (háo hức) tải chúng. –

Trả lời

3

Để tắt tải chậm, hãy đặt LazyLoadingEnabled thành false thay vì đúng. Xem Lazy, háo hức, và tải Explicit của dữ liệu liên quan trong

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application

+0

LazyLoadingEnabled được đặt thành true vì tôi không muốn tải dữ liệu lên. Điều gì đang xảy ra là nó háo hức tải các thực thể liên quan khi nó không nên. – bretcj7

+0

Làm thế nào để bạn biết nó đang háo hức tải? Các hành động cố gắng để kiểm tra một tài sản chuyển hướng kích hoạt tải lười biếng. Với tải chậm trên bạn không thể nhìn thấy một tài sản dẫn hướng null nếu có các thực thể liên quan được nạp. – tdykstra

+0

Ngay cả khi xem đối tượng, thuộc tính mà không mở rộng nó hiển thị Count = 1 cho thuộc tính DrugIdentities. Liệu điều đó vẫn kích hoạt tải háo hức bằng cách chỉ nhìn vào lớp cấp cao nhất có dân cư? – bretcj7

2

Bạn cần phải đặc biệt thiết ProxyCreationEnabled = false nếu bạn muốn thiết lập LazyLoadingEnabled = true.

Bài kiểm tra đã vượt qua những gì tôi mong đợi. Truy vấn đầu tiên trả về đối tượng DrugsNULL cho DrugEntities. Truy vấn thứ hai trả về DrugEntities vì tôi đã sử dụng Include để thực hiện tải mong muốn.

var queryDrug = from d in context.Drug 
           where d.Active == true 
           select d; 

       var drugresults = from d in context.Drug.Include(e => e.DrugIdentities) 
            where d.Active == true 
            select d; 
+9

Câu lệnh đầu tiên của bạn không chính xác. Bạn có thể có ProxyCreationEnabled và LazyLoadingEnabled cả hai thiết lập là true. Sửa lỗi này cho những người dùng Google trong tương lai. – onefootswill

+1

Đặt 'ProxyCreationEnabled = false' và' LazyLoadingEnabled = true' đã thực hiện thủ thuật cho tôi. –

+0

xin lỗi nhưng ProxyCreation không phải là sai để đặt LazyLoadingEnabled thành true. Đây là những độc lập. – MemeDeveloper

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