2008-10-15 8 views
20

¿Hay alguna forma de deshabilitar las funciones de seguimiento de objetos de LINQ sin deshabilitar también las asociaciones secundarias con carga lenta?LINQ to SQL: ¿El establecimiento de ObjectTrackingEnabled a fallas rompe la carga lenta de las entidades secundarias?

Estoy usando LINQ2SQL en un conjunto de pruebas de integración. Solo estoy usando LINQ para verificar los cambios en la base de datos, por lo que quiero que actúe como una simple capa de acceso a datos en lugar de un ORM completo. Para hacer esto, configuré la propiedad ObjectTrackingEnabled del contexto de datos en falso para evitar que LINQ guarde en caché los datos. Esto funciona bien, excepto que rompe asociaciones entre entidades.

Por ejemplo, asuma dos tablas WIDGET y CATEGORY, con una relación FK entre ellas. Con el seguimiento de objetos habilitado, widgetInstance.CATEGORY está correctamente cargado. Con el seguimiento de objetos deshabilitado, no se carga nada y la propiedad CATEGORY es siempre nula.

¿Cómo evito que LINQ almacene datos en caché, sin que también impida la carga diferida?

ACTUALIZACIÓN: Aquí está a link to the MSDN page a la que se hace referencia en la respuesta. También se descubrió que puedo usar LoadWith para hacer una carga ansiosa de datos secundarios. En mi caso, solo quiero los datos, por lo que la carga ansiosa está bien.

Respuesta

15

De acuerdo con MSDN:

carga diferida requiere oponerse seguimiento. Solo son válidos los siguientes tres modos :

ObjectTrackingEnabled = false. DeferredLoadingEnabled se ignora y se deduce que es falso. Este comportamiento corresponde a un DataContext de solo lectura.

ObjectTrackingEnabled = true. DeferredLoadingEnabled = false. Esta situación corresponde a un DataContext que permite a los usuarios cargar un objeto gráfico utilizando las directivas LoadWith, , pero no permite la carga diferida de .

Ambas están configuradas como verdaderas. Este es el valor predeterminado .

O bien tiene que habilitar el seguimiento de objetos y separar las entidades (lo cual es posible ya que está ejecutando pruebas, supongo, de lo contrario es bastante molesto separar cada entidad de otra entidad de ...), o use DataLoadOptions.LoadWith() o AssociateWith() para cargar ansiosamente las relaciones.

+1

Debería tener RTFM :) –