2010-09-23 26 views
8

Tôi vừa có một số lượng lớn *blonde moment**, nhưng nó đã làm nổi bật sự khó chịu mà tôi có với Entity Framework. Tôi đã vô hiệu hóa tải chậm nên tôi buộc phải thực sự nghĩ về những dữ liệu tôi yêu cầu để giữ cho ứng dụng càng nhanh càng tốt.Entity Framework - Điều hướng và Bao gồm các thuộc tính thông qua các bộ sưu tập

Vì vậy, để trả lại dữ liệu trong một truy vấn, tôi cần phải tận dụng các phương pháp Include:

var query = from item in context.Customers 
       .Include(x=> x.Orders) 
      select item 

Điều này là tốt cho đến khi tôi muốn chọn một mục một chút sâu hơn vào hệ thống phân cấp. Ví dụ:

Customer 1-* Orders *-1 Factory 1-1 Factory Type 

Theo như tôi biết, cách duy nhất để trả lại tất cả dữ liệu này háo hức sẽ phải làm như sau:

var query = from item in context.Customers 
       .Include("Orders.Factory.FactoryType") 
      select item 

Với trên tôi không thể sử dụng số System.Data.Entity Lambdas theo ví dụ đầu tiên của tôi. Có ai biết nếu tôi đang thiếu một cái gì đó hiển nhiên ở đây, hoặc tôi bị mắc kẹt với việc sử dụng khai báo chuỗi cho các thuộc tính chuyển hướng của tôi thông qua các bộ sưu tập?

Nếu tôi không có bất kỳ bộ sưu tập, tôi chỉ có thể viết:

.Include(x=> x.Order.OrderType.Factory.FactoryType) // No bother 

Nhưng vì bộ sưu tập Orders, không có cách nào để bước qua để sở hữu một con như xa như tôi có thể nói (FirstOrDefault , SingleOrDefault, v.v., không hoạt động).


** nó chỉ là một turn-of-cụm từ, tôi xảy ra là rất thích cô gái tóc vàng *

Trả lời

14

Đối với bao gồm EntityCollections bạn sử dụng Chọn phương pháp:

var query = from item in context.Customers 
      .Include(c => c.Orders.Select(o => o.Factory.FactoryType)) 
      select item 

Xin lưu ý rằng đây không phải là tình trạng quá tải của tiêu chuẩn ObjectQuery<T>.Include Method và chỉ đơn thuần là một phương pháp mở rộng trên ObjectQuery<T> Lớp học sắp tới với EF CTP4.

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