2008-10-15 22 views
20

Có cách nào để vô hiệu hóa tính năng theo dõi đối tượng của LINQ mà không vô hiệu hóa các liên kết con lười biếng không?LINQ to SQL: Đặt ObjectTrackingEnabled thành sai ngắt tải lười của các thực thể con?

Tôi đang sử dụng LINQ2SQL trong một bộ kiểm tra tích hợp. Tôi chỉ sử dụng LINQ để xác minh các thay đổi trong cơ sở dữ liệu, vì vậy tôi muốn nó hoạt động giống như một lớp truy cập dữ liệu đơn giản hơn là một ORM đầy đủ. Để làm điều này, tôi thiết lập thuộc tính ObjectTrackingEnabled của bối cảnh dữ liệu thành false để ngăn chặn LINQ khỏi dữ liệu lưu trong bộ nhớ đệm. Điều này làm việc tốt, ngoại trừ việc nó phá vỡ các liên kết giữa các thực thể.

Ví dụ: giả sử hai bảng WIDGET và CATEGORY, có mối quan hệ FK giữa chúng. Khi bật theo dõi đối tượng, tiện ích Instance.CATEGORY được tải đúng cách. Với tính năng theo dõi đối tượng bị vô hiệu hóa, không có gì được tải xuống và thuộc tính CATEGORY luôn là rỗng.

Làm cách nào để ngăn LINQ lưu vào dữ liệu lưu vào bộ nhớ cache mà không ngăn cản tải chậm?

CẬP NHẬT: Dưới đây là a link to the MSDN page được tham chiếu bằng câu trả lời. Nghiên cứu thêm cũng bật lên rằng tôi có thể sử dụng LoadWith để tải dữ liệu con một cách háo hức. Trong trường hợp của tôi, tôi chỉ muốn dữ liệu, vì vậy tải mong muốn là tốt.

Trả lời

15

Theo MSDN:

tải thu nhập hoãn lại đòi hỏi đối tượng theo dõi. Chỉ ba chế độ sau đây hợp lệ:

ObjectTrackingEnabled = false. DeferredLoadingEnabled bị bỏ qua và được phỏng đoán là sai. Hành vi này tương ứng với chỉ đọc DataContext.

ObjectTrackingEnabled = true. DeferredLoadingEnabled = false. Tình huống này tương ứng với một DataContext cho phép người dùng tải một đối tượng biểu đồ bằng cách sử dụng chỉ thị LoadWith, nhưng không cho phép tải xuống tải.

Cả hai đều được đặt thành true. Đây là mặc định .

Bạn phải bật đối tượng theo dõi và tách đối tượng (có thể thực hiện được vì bạn đang chạy thử nghiệm, tôi đoán, nếu không thì sẽ rất phiền phức khi tách từng thực thể duy nhất của ...), hoặc sử dụng DataLoadOptions.LoadWith() hoặc AssociateWith() để háo hức tải các mối quan hệ.

+1

Tôi nên có RTFM :) –