18

Tôi đang cố tải một cách Eagerly tất cả các thực thể hoặc bộ sưu tập thực thể liên quan trong một cuộc gọi. Đối tượng của tôi Hình như:Đang tải các thực thể lồng ghép/Bộ sưu tập với khung thực thể

Class Person 
{ 
    public virtual long Id { get; set; } 
    public virtual string FirstName { get; set; } 
    public virtual string LastName { get; set; } 
} 

Class Employee 
{ 
    public virtual long Id { get; set; } 
    public DateTime AppointmentDate { get; set; } 
    public virtual ICollection<EmployeeTitle> Titles { get; set; } 
    public virtual Person Person { get; set; } 
} 

Class EmployeeTitle 
{ 
    public virtual long Id { get; set; } 
    public virtual bool IsCurrent { get; set; } 
    public virtual Title Title { get; set; } 
} 
Class Title 
{ 
    public virtual long Id { get; set; } 
    public virtual string Code { get; set; } 
    public virtual string Description { get; set; } 
} 

gì Iam cố gắng để làm là nếu tôi gọi một phương thức để nạp tất cả các nhân viên, kết quả nên bao gồm Người, Danh sách EmployeeTitles bao gồm cả mã và mô tả từ Tiêu đề tôi đã có thể để đạt được cấp độ thứ ba tức là nhận được Nhân viên với người và danh sách EmployeeTitle. Tôi không biết cách lấy thông tin tiêu đề bằng EmployeeTitle. Mã của tôi để có được điều này là:

Context.Employees.Include("Person").Include(e => e.Titles).ToList(); 

hãy làm sáng tỏ về làm thế nào để thực hiện điều này. Cảm ơn trước.

Trả lời

40

Bạn có thể thử này:

Context.Employees 
    .Include(e => e.Person) 
    .Include(e => e.Titles.Select(t => t.Title)) 
    .ToList(); 

Select có thể được áp dụng cho một bộ sưu tập và tải chuyển hướng tính chất của cấp độ tiếp theo trong đồ thị đối tượng.

+0

Hoàn hảo :) Cảm ơn rất nhiều. – Amit

+8

QUAN TRỌNG: Không vô tình sử dụng cùng một biến cho cả hai biểu thức lambda '.Bao gồm (x => x.Titles.Select (x => x.Title))' hoặc bạn sẽ nhận được 'Không thể chuyển đổi biểu thức lambda thành kiểu ' string 'bởi vì nó không phải là loại đại biểu' –

+4

Bạn phải có "using System.Data.Entity", nếu không nó sẽ xuất hiện vì quá tải này không tồn tại. –

3

Vì đây là trang đầu tiên trong tìm kiếm của tôi trên google, tôi chỉ muốn đăng bài này.

Câu trả lời của Slauma là tốt. Nhưng bạn nên sử dụng Load() thay vì ToList() nếu bạn không định sử dụng danh sách đó. Vì vậy, nó sẽ là:

Context.Employees 
     .Include(e => e.Person) 
     .Include(e => e.Titles.Select(t => t.Title)) 
     .Load(); 
Các vấn đề liên quan