簡體   English   中英

LINQ to Entities的DataLoadOptions等效?

[英]DataLoadOptions equivalent for LINQ to Entities?

LINQ to SQL中是否存在LINQ to SQL中存在的DataLoadOptions類的版本? 基本上我想有一個存儲所有急切加載配置的地方,而不必添加.Include()調用我所有的LINQ to Entities查詢。 或者如果有人有一個更好的解決方案,那么肯定也會對此開放。

TIA,
班吉

實體框架不支持整個'ObjectContext'的預先加載設置。 但是您可以使用部分類中的include選項聲明所有必需的'IQueryable'屬性。 例如:

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

就個人而言,我很高興沒有(官方)EF等價的DataLoadOptions 為什么? 原因如下:

  • 以拋出異常的方式使用它們太容易了,請參閱MSDN頁面的備注部分。
  • 我不喜歡過濾子集合的概念。 CustomerOrders ,我希望Orders成員代表客戶訂單(懶惰與否)。 在其他地方定義的過濾器(通過AssociateWith )很容易被遺忘。 我會在需要的時間和地點過濾它們。 這導致了最后的反對意見:
  • 最重要的是:它是有狀態的 ,大多數錯誤都是由意外狀態引起的。 DataLoadOptions以稍后查詢受影響的方式更改DataContext的狀態。 我更喜歡在需要的地方和時間定義急切加載。 打字很便宜,錯誤很貴。

盡管如此,為了完整起見,我應該提到Muhammad Mosa確實在EF版本的DataLoadOptions中付出了一些努力。 我從來沒有嘗試過。

我意識到你可能想要防止重復的代碼。 但是,如果您在多個地方需要形狀相同的查詢,那么您已經在重復代碼,無論是否包含“全局”定義。 中央急切加載配置是偽DRY-ness。 很快你會發現自己在需要急切加載時絆倒自己的腳,但是,它已經配置好了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM