2010-12-28 29 views
74

Tôi đã xem nhiều bài viết về cách khắc phục vấn đề này, tất cả liên quan đến CTP4, Hoặc thêm các phương thức mở rộng của riêng tôi.Sử dụng Include trong Entity Framework 4 với các biểu thức lambda

Có EF4 "chính thức" bao gồm cách sử dụng các biểu thức lambda bên trong bao gồm (cho cả quan hệ cấp 1 và cấp 2 trở lên) hoặc cuối cùng không được đưa vào RTM?

Nó có một - Tôi sẽ vui mừng khi biết làm thế nào để làm điều đó, như sử dụng biểu thức lambda trong mã của tôi bây giờ (với # system.data.entity # system.data.linq) vẫn mang lại cho tôi:

không thể chuyển đổi biểu thức lambda để gõ 'chuỗi' vì nó không phải là một loại đại biểu trên:

var customers = from c in 
context.Customers.Include(c=>c.Phone) 
+1

không, nó không tồn tại (ngoài CTP4 - như bạn nói). Tôi sử dụng các phương pháp mở rộng/enums để đạt được loại an toàn. – RPM1984

+0

Tôi đã làm điều đó quá, do đó, MS bao gồm nó trên CTP4 và loại bỏ nó trong RTM? – Dani

Trả lời

188

Phiên bản RTM của Entity Framework 4.1 thực sự bao gồm phương pháp khuyến nông trong file EntityFramework.dll, để tải háo hức với lambda qua Include chức năng. Chỉ cần bao gồm các DLL trong dự án của bạn và bạn sẽ có thể viết mã như:

var princesses1 = context.Princesses.Include(p => p.Unicorns).ToList(); 

Hãy nhớ thêm một Import/Sử dụng tuyên bố để bao gồm các System.Data.Entity namespace. Nếu không trình biên dịch không thể tìm thấy các phương thức mở rộng. Ví dụ:

using System.Data.Entity; 

Xem bài viết này ADO.NET team blog để biết thêm thông tin.

+1

Trong khi liên kết đến blog ADO.net vẫn có liên quan, tham chiếu/hướng dẫn EF6 cho cùng một chủ đề là: [Loading Related Entities] (https://msdn.microsoft.com/en-us/data/jj574232) Tôi nghĩ tài liệu cần phải chuyển sang ví dụ Công chúa và Unicorn thay vì Blog và Bài đăng mà họ đã sử dụng ở mọi nơi. – Arkaine55

+0

cảm ơn, tôi chỉ cần thêm bằng cách sử dụng System.Data.Entity; công việc của tôi. – adnan

4

không không có hỗ trợ chính thức cho Include với biểu thức lambda trong RTM vào lúc này. Tôi đang sử dụng this.

Khi chúng ta nói về CTP4, chúng tôi có nghĩa là Tính năng khung thực thể. Đây là API mới hơn so với EF4. Nó chủ yếu bao gồm Code First và vài cải tiến khác.

+0

Bất kỳ ý tưởng nào khi MS sẽ hỗ trợ tính năng này? Tôi hiểu rằng tất cả các phương thức mở rộng này đều có vấn đề về hiệu suất với đối tượng lớn/đa cấp - vì chúng cần phải đi qua một lần nữa và một lần nữa cho mỗi cuộc gọi, và trong khi đối tượng "định nghĩa" cây là không đổi và có thể được lưu trữ, không có giải pháp như điều này được nêu ra. – Dani

+0

Tính năng khung thực thể hiện đang ở trong CTP5. Tôi đoán phiên bản RTM nên được puplished trong quater đầu tiên của năm 2011. Vì vậy, hy vọng nó sẽ chứa Bao gồm với biểu thức lambda nhưng tôi đã không kiểm tra thực hiện của nó nhưng tôi không thể nói nếu nó sử dụng bất kỳ loại bộ nhớ đệm. –

+30

Câu trả lời này sai với EF 4.3.x. Các câu trả lời khác là đúng, người ta phải có ** bằng cách sử dụng System.Data.Entity ** để có được tình trạng quá tải với các biểu thức lamda. –

75

Mặc dù đây được ngụ ý trong câu hỏi, cho bất kỳ ai khác có cùng một vấn đề mà họ không thể sử dụng lambdas với .Include, hãy chắc chắn bạn có điều này:

using System.Data.Entity; 
+0

Cảm ơn Aaron vì tuyên bố này! Đó chính xác là những gì tôi cần. – PHenry

+0

Tôi không tin! Rất đơn giản, cảm ơn Aaron. – Hoody

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