2012-08-25 41 views
5

是否有存在於LINQ的LINQ to SQL中,以實體DataLoadOptions類的版本?基本上我想有一個地方存儲所有渴望的加載配置,而不必將.Include()調用添加到我的所有LINQ to Entities查詢中。或者如果有人有更好的解決方案,那麼絕對可以接受。DataLoadOptions等價於LINQ to Entities?

TIA,
班吉

+0

FYI的人誰碰到這個發生在谷歌:http://www.governor.co.uk/news-plus-views/2010/2/16/entityframework-include-multiple-extension-method也相當有幫助 – benjy

回答

5

個人而言,我很高興,沒有(官方)EF相當於DataLoadOptions。爲什麼?有幾個原因:

  • 這是太容易使用它們的方式,異常拋出,看到MSDN page的備註部分。
  • 我不喜歡的過濾子集合概念。當Customer具有Orders,我希望Orders成員代表客戶(懶惰與否)的訂單。在其他地方定義的過濾器(通過AssociateWith)很容易被遺忘。我會根據需要過濾它們。這導致了最後的異議:
  • 更重要的是:它是狀態,最錯誤是由意外狀態造成的。 DataLoadOptions以稍後查詢受到影響的方式更改DataContext的狀態。我更喜歡在需要的時間和地點定義熱切加載。打字很便宜,錯誤很貴。

然而,出於完整性的緣故,我要指出,穆罕默德莫薩並投入一些精力在EF version of DataLoadOptions。我從來沒有嘗試過。

我知道你可能希望避免重複的代碼。但是,如果您需要在多個地方進行形狀相同的查詢,那麼您已經重複了代碼,可以使用或不使用「全局」定義的查詢。中央加載配置是僞DRY-ness。很快你會發現自己絆倒了自己的腳,當渴望加載是不希望的,但是,該死的,它的配置發生!

5

實體框架不會對整個 'ObjectContext的' 支持立即加載設置。但是你可以用partial選項中的include選項聲明所有必需的'IQueryable'屬性。例如:

public IQueryable<Order> Orders { 
    get { 
    return OrderSet.Include("OrderDetails"); 
    } 
}