2013-08-08 56 views
11

Tôi quan tâm đến việc sử dụng AsNoTracking với các truy vấn LINQ chọn để cải thiện hiệu suất. Tôi đang sử dụng Entity Framework 5 với Code First.AsNoTracking bằng cách sử dụng cú pháp truy vấn LINQ thay vì cú pháp Phương pháp

Tuy nhiên, tất cả truy vấn của tôi được viết bằng cú pháp LINQ truy vấn và tất cả các ví dụ AsNoTracking được hiển thị bằng cú pháp Phương pháp. Tôi biết rằng AsNoTracking đã được tạo cho cú pháp Phương pháp nhưng làm cách nào để tôi đạt được điều tương tự với cú pháp Truy vấn?

+0

AsNoTracking KHÔNG cải thiện hiệu suất, vì nó cho phép EF tiếp xúc các nguồn dữ liệu trên mỗi cuộc gọi. Theo dõi là do đó cũng bộ nhớ đệm và cải thiện hiệu suất. – Robert

+0

Xin chào Robert, điều đó thật thú vị vì tôi đã đọc rất nhiều bài viết hướng tới AsNoTracking() để cải thiện hiệu suất khi sử dụng SELECT mà không cần phải cập nhật. Ví dụ: http://blog.staticvoid.co.nz/2012/4/2/entity_framework_and_asnotracking – Mitch

+0

Ok, để chính xác: AsNoTracking thực sự nhanh hơn khi tìm nạp dữ liệu chưa được tìm nạp trước đó, bởi vì nó không cần kiểm tra xem dữ liệu mong muốn đã có sẵn (tất nhiên là sẽ nhanh nhất). – Robert

Trả lời

18

Bạn áp dụng AsNoTracking() đến DbSet:

+0

Rất cám ơn, đó là câu trả lời tôi đang tìm kiếm! – Mitch

1

Cú pháp truy vấn được thay thế bằng cú pháp phương pháp bởi trình biên dịch, vì vậy không có sự khác biệt nào cả ở cuối.

+0

Tôi đã thử sử dụng AsNoTracking() với cú pháp Truy vấn của tôi nhưng nó thậm chí không hiển thị trên Intellisense như một tùy chọn. – Mitch

+0

Trên những suy nghĩ khác, có lẽ tôi không sử dụng nó một cách chính xác hoặc tôi đang thiếu một thư viện? tức là var result = (từ người trong ctx. Mọi người chọn người) .AsNoTracking(). ToList() – Mitch