Asnotracking là gì

Sự khác biệt là trong trường hợp đầu tiên, người dùng được truy xuất không bị theo dõi bởi ngữ cảnh nên khi bạn định lưu người dùng trở lại cơ sở dữ liệu, bạn phải đính kèm và đặt trạng thái chính xác của người dùng để EF biết rằng nên cập nhật người dùng hiện tại thay vì chèn một cái mới. Trong trường hợp thứ hai, bạn không cần phải làm điều đó nếu bạn tải và lưu người dùng với cùng một ngữ cảnh vì cơ chế theo dõi xử lý việc đó cho bạn.

xem trang này Entity Framework và AsNoTracking

Những gì AsNoTracking làm

Entity Framework hiển thị một số tùy chọn điều chỉnh hiệu suất để giúp bạn tối ưu hóa hiệu suất của các ứng dụng của mình. Một trong những tùy chọn điều chỉnh này là .AsNoTracking[]. Tối ưu hóa này cho phép bạn nói với Entity Framework không theo dõi kết quả của một truy vấn. Điều này có nghĩa là Entity Framework thực hiện không xử lý hoặc lưu trữ bổ sung các thực thể được truy vấn trả về. Tuy nhiên, điều đó cũng có nghĩa là bạn không thể cập nhật các thực thể này mà không gắn lại chúng vào biểu đồ theo dõi.

có hiệu suất tăng đáng kể để có được bằng cách sử dụng AsNoTracking

Không theo dõi truy vấn LINQ đến các thực thể

Nên sử dụng AsNoTracking [] khi truy vấn của bạn dành cho các hoạt động đọc. Trong các trường hợp này, bạn lấy lại các thực thể của mình nhưng chúng không bị theo dõi bởi ngữ cảnh của bạn. Điều này đảm bảo sử dụng bộ nhớ tối thiểu và hiệu suất tối ưu

Ưu điểm
  1. Cải thiện hiệu suất so với các truy vấn LINQ thông thường.
  2. Vật thể đầy đủ.
  3. Đơn giản nhất để viết với cú pháp được xây dựng trong ngôn ngữ lập trình.
Nhược điểm
  1. Không phù hợp với hoạt động của CUD.
  2. Một số hạn chế kỹ thuật nhất định, chẳng hạn như: Các mẫu sử dụng Default IfEmpty cho các truy vấn OUTER THAM GIA dẫn đến các truy vấn phức tạp hơn các câu lệnh OUTER THAM GIA đơn giản trong Entity SQL.
  3. Bạn vẫn có thể sử dụng THÍCH với khớp mẫu chung.

Thêm thông tin có sẵn ở đây:

Cân nhắc hiệu suất cho Entity Framework

Khung thực thể và Không theo dõi

Vô hiệu hóa theo dõi cũng sẽ khiến các bộ kết quả của bạn được truyền vào bộ nhớ. Điều này hiệu quả hơn khi bạn làm việc với các bộ dữ liệu lớn và không cần toàn bộ bộ dữ liệu cùng một lúc.

Tài liệu tham khảo:

  • Cách tránh tràn bộ nhớ khi truy vấn bộ dữ liệu lớn với Entity Framework và LINQ
  • Tập dữ liệu lớn của khung thực thể, ngoại lệ bộ nhớ

AsNoTracking [] cho phép bỏ qua yêu cầu "khóa duy nhất trên mỗi bản ghi" trong EF [không được đề cập rõ ràng bằng các câu trả lời khác].

Điều này cực kỳ hữu ích khi đọc Chế độ xem không hỗ trợ khóa duy nhất vì có thể một số trường là không thể hoặc bản chất của chế độ xem không thể lập chỉ mục một cách hợp lý.

Đối với những trường hợp này, "khóa" có thể được đặt thành bất kỳ cột không thể nào nhưng sau đó AsNoTracking [] phải được sử dụng với mọi bản ghi truy vấn khác [trùng lặp bởi khóa] sẽ bị bỏ qua.

Nếu bạn có điều gì khác làm thay đổi DB [nói một quy trình khác] và cần đảm bảo bạn thấy những thay đổi này, hãy sử dụng AsNoTracking[], nếu không, EF có thể cung cấp cho bạn bản sao cuối cùng mà bối cảnh của bạn đã thay thế, do đó, thường sử dụng bối cảnh mới mỗi lần truy vấn:

//codethug.com/2016/02/19/Entity-Framework-Cache-Busting/

Video liên quan

Chủ Đề