2011-12-16 30 views
5

Tôi đang làm việc với Entity Framework trong một thời gian nhưng vẫn còn có một số "lỗ đen" với cách hoạt động dưới mui xe. Ngay cả sau khi đọc vài bài báo tôi không chắc rằng sự hiểu biết của tôi là chính xác.Hiểu EF dưới mui xe. Bao gồm vs tham gia


Hãy bắt đầu với câu hỏi:

  • Làm thế nào EF Include đang làm việc dưới mui xe?
  • Sự khác nhau giữa Tham gia và Bao gồm là gì?
  • Các vấn đề về hiệu suất với Bao gồm (tải chậm và tải háo hức, truy vấn SQL được tạo, v.v ...)?
  • Khi nào tôi nên sử dụng Tham gia thay thế Bao gồm và ngược lại?

Trả lời

9

Khi truy vấn EF qua biểu thức LINQ hoặc lambda, bạn chỉ cần câu lệnh nối nếu lược đồ cơ bản không cung cấp FK và do đó bạn không có thuộc tính điều hướng trên đối tượng.

Ở phía bên kia, bao gồm (tải háo hức) và tải chậm chỉ có thể hoạt động nếu có FK, bởi vì nó sử dụng các thuộc tính điều hướng.

sql cơ bản trong cả hai trường hợp sẽ sử dụng kết nối (vì sql không có khái niệm "thuộc tính điều hướng").

Đối với hiệu suất, nó phụ thuộc vào các tình huống. Tải kém và tải Eager (do đó trong kịch bản FK) có thể là một lựa chọn khó khăn.

Tôi thường đi với tải chậm, hữu ích khi bạn có kết quả chính lớn, nhưng bạn chỉ cần "tham gia" dữ liệu của một vài mục trong toàn bộ kết quả.

Nếu bạn biết trước rằng bạn sẽ cần dữ liệu kết nối của toàn bộ kết quả, tải mong muốn có thể tốt hơn cho hiệu suất. Tôi muốn đề nghị thử nghiệm và xem cho chính mình.

+0

Cảm ơn bạn đã trả lời nhưng vẫn cần một cái gì đó chính xác hơn. –

+0

Điều gì sẽ xảy ra nếu bạn đã thêm các thuộc tính điều hướng theo cách thủ công mà không có các khóa lạ bên ngoài. Sẽ bao gồm công việc như mong đợi hay không? – Dan

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