[英]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.