2011-06-21 30 views
18

Tôi đang gặp phải một số vấn đề về hiệu suất với các truy vấn Code-First Entity Framework và tôi tin rằng sự biên dịch trước có thể là câu trả lời. Nếu tôi đang sử dụng Khung thực thể "bình thường", tôi chỉ cần sử dụng phương thức CompiledQuery.Compile để xử lý trước các truy vấn của mình. Nhưng kể từ khi tôi có một DbContext và không phải là một ObjectContext, tôi không thể làm điều này để làm việc.Làm cách nào để biên dịch trước một Truy vấn đầu tiên của Mã khung thực thể?

Tôi nhận ra rằng DbContext là IObjectContextAdapter, cho phép tôi truy cập vào ObjectContext, nhưng tôi không thể tìm thấy phương pháp cho phép tôi lấy IQueryable từ ngữ cảnh đối tượng hoạt động trong truy vấn được biên dịch trước của tôi. Tôi đã cố gắng sử dụng CreateObjectSet, nhưng khi EF cố chạy truy vấn, nó đã phàn nàn rằng nó không thể chuyển đổi phương thức đó thành SQL.

Vậy cách tốt nhất để biên dịch trước các truy vấn LINQ đối với DbContext Mã-Đầu tiên là gì?

Trả lời

8

Kể từ announecment chính thức:

"Không hỗ trợ truy vấn tổng hợp từ DbContext Đáng tiếc là do một số hạn chế kỹ thuật trong các chức năng truy vấn biên soạn chúng tôi vận chuyển trong .NET Framework 4.0 chúng tôi không thể hỗ trợ các truy vấn biên soạn qua API DbContext. Chúng tôi nhận thấy đây là một hạn chế đau đớn và sẽ hoạt động để kích hoạt tính năng này cho bản phát hành tiếp theo. "

Link.

11

Điều này có thể được giải quyết trong EFv4.2 EF vNext (hiện tại trong very first CTP) bởi auto-compiled LINQ queries.

+0

Điều này có nghĩa là nó sẽ chỉ khả dụng trên .NET 4.5? Hoặc nó sẽ được phát hành trong EF4.3? –

+3

@Nelson: Chỉ trong .NET 4.5 –

+2

Có nó được giải quyết trong Entity Framework 5 trở lên. –

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