簡體   English   中英

LINQ to SQL:對延​​遲加載的關聯進行加載處理

[英]LINQ to SQL: On load processing of lazy loaded associations

如果我有一個延遲加載與非常大的對象的關聯的對象,有沒有辦法在延遲加載時進行處理? 我以為我可以使用DataLoadOptions中的AssociateWith或LoadWith,但是對於你可以在那些中做什么有非常非常具體的限制。 基本上我需要在EntitySet <>決定加載關聯對象的時候得到通知,所以我可以捕獲該事件並對加載的對象進行一些處理。 我不想在加載父對象時簡單地遍歷EntitySet,因為這將強制加載所有延遲加載的項目(完全失去延遲加載的目的)。

訂閱ListChanged事件

EntitySet <T>公開一個名為ListChanged的事件,您可以使用該事件來檢測是否正在添加項目。 評估ListChangedEventArgs的ListChangedType屬性。 這是ListChangedType枚舉中可用值的鏈接。

只要您避免請求枚舉器,就不會強制執行加載。

http://msdn.microsoft.com/en-us/library/system.componentmodel.listchangedtype.aspx

我沒有看到任何可擴展性點可用; 我唯一能看到的是在FK實體中,每個單獨的對象都有一個Created方法從構造函數中觸發...

所以構造函數調用已創建,而且就個人而言,我並非100%確定實體集加載會在那時創建每個單獨的對象,並觸發事件......

HTH。

Linq2SQL生成的datacontext和數據類有一堆內置的可擴展性方法。

http://msdn.microsoft.com/en-us/library/bb882671.aspx

http://csainty.blogspot.com/2008/01/linq-to-sql-extending-data-classes.html

這些中的任何一個都可以滿足您的需要。

您肯定不會使用默認的EntitySet<>而是可以使用任何IList <>集合。 我對EntitySet <>做了一點反思,但是沒有找到Load()方法的鈎子,它實現枚舉實體集的惰性源(它實際上是查詢和實現EntitySet的地方)。

Linq To SQL將使用Assign()方法將IEnumerable源(默認為惰性)分配給您的集合。 從那里開始,您可以在首次枚舉源集合(執行查詢)時使用自定義鈎子實現自己的延遲加載EntitySet。

暫無
暫無

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

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