Если у меня есть объект, что ленивые загрузки связь с очень большими объектами, там способ, которым я могу сделать обработку в то время, когда ленивая загрузка происходит? Я думал, что мог использовать AssociateWith или LoadWith от DataLoadOptions, но существует очень, очень определенные ограничения на то, что можно сделать в тех. В основном я должен быть уведомлен, когда EntitySet <> решает, что пора загрузить связанный объект, таким образом, я могу поймать то событие и сделать некоторую обработку на загруженном объекте. Я не хочу просто идти через EntitySet, когда я загружаю родительский объект, потому что это вынудит все ленивые загруженные объекты загрузиться (нанесение поражения цели ленивой загрузки полностью).
Подписка на событие ListChanged
EntitySet
Нет опасности принудительного выполнения загрузки, пока вы не запрашиваете перечислитель.
http://msdn.microsoft.com/en-us/library/system.componentmodel.listchangedtype.aspx
Я не вижу никаких точек расширения для этого; единственное, что я вижу - в сущности FK есть метод Created на каждом отдельном объекте, который вызывается из конструктора...
Итак, конструктор вызывает created, и лично я не уверен на 100%, что загрузка набора сущностей создает каждый отдельный объект в это время и вызывает событие...
HTH.
Существует множество встроенных методов расширения классов datacontext и data, создаваемых Linq2SQL.
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 с помощью пользовательского хука в точке, где вы впервые перечисляете коллекцию источников (выполняете запрос).