2012-08-25 41 views
5

Có phiên bản của lớp DataLoadOptions tồn tại trong LINQ to SQL cho LINQ to Entities không? Về cơ bản, tôi muốn có một nơi lưu trữ tất cả cấu hình tải mong muốn và không phải thêm các cuộc gọi .Include() vào tất cả các truy vấn LINQ to Entities của tôi. Hoặc nếu ai đó có một giải pháp tốt hơn chắc chắn sẽ mở cửa cho điều đó.DataLoadOptions tương đương với LINQ to Entities?

TIA,
Benjy

+0

FYI cho bất kỳ ai xảy ra trên Google: http://www.governor.co.uk/news-plus-views/2010/2/16/entityframework-include-multiple-extension-method cũng khá hữu ích – benjy

Trả lời

5

Cá nhân tôi rất vui vì không có (chính thức) EF tương đương DataLoadOptions. Tại sao? Một vài lý do:

  • Đó là quá dễ dàng để sử dụng chúng trong một cách mà trường hợp ngoại lệ được ném, xem xét phần của MSDN page.
  • Tôi không thích khái niệm về bộ sưu tập con đã lọc. Khi số CustomerOrders, tôi muốn thành viên Orders đại diện cho các đơn đặt hàng của khách hàng đó (lười biếng hay không). Một bộ lọc được xác định ở một nơi khác (bởi AssociateWith) có thể dễ dàng bị lãng quên. Tôi sẽ lọc chúng khi cần và ở đâu. Điều này dẫn đến phản đối cuối cùng:
  • Quan trọng nhất: đó là trạng thái và hầu hết các lỗi đều do trạng thái không mong muốn gây ra. DataLoadOptions thay đổi trạng thái của DataContext theo cách mà các truy vấn sau đó bị ảnh hưởng. Tôi thích xác định tải mong muốn ở đâu và khi nào tôi cần. Gõ là rẻ, lỗi rất đắt.

Tuy nhiên, vì lợi ích đầy đủ, tôi nên đề cập rằng Muhammad Mosa đã nỗ lực trong một số EF version of DataLoadOptions. Tôi chưa bao giờ thử nó.

Tôi nhận thấy rằng bạn có thể muốn ngăn mã lặp lại. Nhưng nếu bạn cần truy vấn có hình dạng giống nhau ở nhiều nơi, bạn đã lặp lại mã, có hoặc không có "toàn cầu" được xác định bao gồm. Cấu hình tải trung tâm háo hức là giả DRY-Ness. Và chẳng mấy chốc bạn sẽ thấy mình vấp ngã trên đôi chân của chính mình khi tải háo hức là không mong muốn nhưng, darn, nó được cấu hình để xảy ra!

5

Entity Framework không hỗ trợ cài đặt tải háo hức cho cả 'ObjectContext'. Nhưng bạn có thể khai báo tất cả các thuộc tính được yêu cầu 'IQueryable' với các tùy chọn bao gồm trong một lớp một phần. Ví dụ:

public IQueryable<Order> Orders { 
    get { 
    return OrderSet.Include("OrderDetails"); 
    } 
} 
Các vấn đề liên quan