2017-02-02 23 views
7

Thực ra tôi có một truy vấn LINQ tìm nạp một thực thể và một số thuộc tính điều hướng của nó.AsNoTracking() và Bao gồm

context.MyEntity 
    .AsNoTracking() 
    .Include(i=> i.Nav1) 
    .Include(i=> i.Nav2) 
    .Where(x=> x.Prop1==1) 
    .FirstOrDefault(); 

Bây giờ câu hỏi của tôi là:

là đủ truy vấn này vì đã không theo dõi MyEntity và NAv1, Nav2 hoặc phải thêm AsNoTracking cho mỗi tài sản chuyển hướng. như thế này:

context.MyEntity 
    .AsNoTracking() 
    .Include(i=> i.Nav1) 
    .AsNoTracking() 
    .Include(i=> i.Nav2) 
    .AsNoTracking() 
    .Where(x=> x.Prop1==1) 
    .FirstOrDefault(); 
+1

Bạn chỉ cần 'AsNoTracking' một lần cho mỗi truy vấn để ví dụ đầu tiên của bạn là chính xác. Tôi tin rằng thứ hai sẽ ném một ngoại lệ thời gian chạy (không chắc chắn cái nào). – Igor

+0

Nếu bạn chuỗi nhiều LINQ phương pháp bạn luôn luôn vượt qua chuỗi trả về từ phương pháp trước để sau đây. Vì vậy, sau khi 'AsNoTracking' bạn có một truy vấn mà các thực thể trả về sẽ không được lưu trữ –

+0

Tks giúp đỡ của bạn –

Trả lời

4

Sử dụng AsNoTracking sau khi bạn đã hoàn thành tất cả thông số truy vấn nhưng trước khi chuyển dữ liệu vào bộ nhớ. Trong ví dụ này, bạn sẽ muốn:

context.MyEntity 
    .Include(i=> i.Nav1) 
    .Include(i=> i.Nav2) 
    .Where(x=> x.Prop1==1) 
    .AsNoTracking() 
    .FirstOrDefault(); 

Bất kỳ đối tượng con nào của thực thể mẹ sẽ không được theo dõi.