Si tengo un objeto que carga una asociación con objetos muy grandes, ¿hay alguna manera de que pueda hacer el procesamiento en el momento en que se produce la carga lenta? Pensé que podría usar AssociateWith o LoadWith desde DataLoadOptions, pero hay restricciones muy, muy específicas sobre lo que puedes hacer en esos. Básicamente necesito ser notificado cuando un EntitySet <> decide que es hora de cargar el objeto asociado, por lo que puedo atrapar ese evento y hacer algún procesamiento en el objeto cargado. No quiero simplemente caminar a través de EntitySet cuando cargue el objeto principal, porque eso forzará la carga de todos los elementos cargados en modo perezoso (lo que frustra por completo el propósito de la carga diferida).LINQ to SQL: en el procesamiento de la carga de asociaciones con carga diferida
Respuesta
Suscribirse al ListChanged Evento
EntitySet <T> expone un evento llamado ListChanged que se puede utilizar para detectar si se está agregando un elemento. Evalúa la propiedad ListChangedType de ListChangedEventArgs. Aquí hay un enlace a los valores disponibles en la enumeración ListChangedType.
No hay peligro de forzar la ejecución de la carga siempre que evite solicitar el enumerador.
http://msdn.microsoft.com/en-us/library/system.componentmodel.listchangedtype.aspx
No funcionará, la función Load() en EntitySet, que enumerará el origen IEnumerable (= perezoso), no levanta ningún ListChangedEvents. –
Debe rellenar una lista interna al cargar. Me pregunto si las últimas Rx (extensiones reactivas) podrían ayudar a detectar la carga. Vea http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx. – randolphcabral
Completa una lista interna, lo que no genera ninguna notificación de ListChanged. –
No veo ningún punto de extensibilidad para este disponible; lo único que puedo ver es que en la entidad FK hay un método Creado en cada objeto individual que se dispara desde el constructor ...
Así que las llamadas al constructor creadas, y personalmente, no estoy 100% seguro de que la carga del conjunto de entidad crea cada objeto individual en ese momento y dispara el evento ...
HTH.
Bueno, eso no ayudó directamente, pero sí me recordó que PLINQO tiene un método OnLoaded que puedo usar. Todavía no es perfecto, pero puede superar mi problema actual. –
Hay un montón de métodos de extensibilidad integrados para el contexto de datos y las clases de datos generados por Linq2SQL.
http://msdn.microsoft.com/en-us/library/bb882671.aspx
http://csainty.blogspot.com/2008/01/linq-to-sql-extending-data-classes.html
Cualquiera de estos puede ser capaz de servir al propósito que necesita.
Usted está definitivamente no obligados a utilizar el valor predeterminado EntitySet<>
pero puede utilizar cualquier <> colección IList lugar. Reflexioné un poco sobre EntitySet <> pero no encontré ningún enlace en el método Load(), que implementa la enumeración de la fuente diferida del conjunto de entidades (es donde realmente se consulta y materializa el EntitySet).
Linq To SQL usará el método Assign() para asignar una fuente IEnumerable (que es floja de forma predeterminada) a su colección. A partir de allí, puede implementar su propio EntitySet de carga lenta con un gancho personalizado en el punto donde primero enumera la colección de origen (ejecutar la consulta).
- 1. ¿El LINQ con un resultado escalar disparar la carga diferida
- 2. Carga diferida, carga diferida y carga ansiosa en el marco de la entidad
- 3. LINQ to SQL carga ansiosa con las condiciones
- 4. ¿Biblioteca de carga diferida?
- 5. ¿Carga diferida del iframe?
- 6. Carga diferida de los atributos
- 7. Elementos de carga diferida con filtrado
- 8. Carga diferida de imágenes con degradación (JavaScript)
- 9. UITableView optimización de carga diferida
- 10. ¿Linq to sql carga automáticamente las entidades asociadas?
- 11. nhibernate opciones de carga diferida
- 12. Desactivar toda la carga diferida o forzar la carga ansiosa para un contexto LINQ
- 13. Cómo convertir esta consulta LINQ en carga diferida
- 14. LINQ to SQL: ¿El establecimiento de ObjectTrackingEnabled a fallas rompe la carga lenta de las entidades secundarias?
- 15. Carga diferida en Knockout JS
- 16. Carga ansiosa de asociaciones polimórficas en ActiveRecord
- 17. Deshabilitar la carga diferida en Hibernate
- 18. La carga diferida en Rails 3.2.6
- 19. UITableView con desplazamiento infite y carga diferida
- 20. Páginas de carga diferida en UIScrollView
- 21. Carga diferida de TreeView en .NET
- 22. Carga diferida de Hibernate en objetos separados
- 23. Spring + Hibernate Error de carga diferida
- 24. Implementación de módulos con carga diferida en VBScript
- 25. imágenes de carga diferida y SEO
- 26. imágenes carga diferida dentro de jQuery Mobile
- 27. EF: La carga diferida, la carga ansiosa, y "la enumeración de la enumerables"
- 28. Evitar que Dozer active la carga diferida de Hibernate
- 29. Patrón de repositorio con carga diferida usando POCO
- 30. carga/procesamiento de animación en Perl
Utiliza el término EntitySet <> donde LINQ to SQL usa Table <>. ¿Estás usando Entity Framework en su lugar? Si es así, creo que tengo tu respuesta. –