tutorial - LINQ to SQL: ¿El establecimiento de ObjectTrackingEnabled a fallas rompe la carga lenta de las entidades secundarias?
linq c# tutorial español (1)
¿Hay alguna manera de deshabilitar las funciones de seguimiento de objetos de LINQ, sin deshabilitar también las asociaciones de niños cargadas de forma diferida?
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, suponga 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 evitar también la carga diferida?
ACTUALIZACIÓN: Aquí hay un enlace a la página de MSDN a la que hace referencia la respuesta. También se descubrió que puedo usar LoadWith para cargar ansiosamente datos secundarios. En mi caso, solo quiero los datos, por lo que la carga ansiosa está bien.
De acuerdo con MSDN:
La carga diferida requiere seguimiento de objetos. Solo los siguientes tres modos son válidos:
ObjectTrackingEnabled = false. DeferredLoadingEnabled se ignora y se deduce que es falso. Este comportamiento corresponde a un DataContext de solo lectura.
ObjectTrackingEnabled = true. DeferredLoadingEnabled = falso. Esta situación corresponde a un DataContext que permite a los usuarios cargar un gráfico de objetos mediante el uso de directivas LoadWith, pero no permite la carga diferida.
Ambos están configurados en verdadero. Este es el predeterminado.
Tienes que habilitar el seguimiento de objetos y separar entidades (lo cual es factible ya que estás ejecutando pruebas, supongo, de lo contrario es bastante molesto separar cada entidad de otra entidad de ...), o usar DataLoadOptions.LoadWith () o AssociateWith () para cargar ansiosamente las relaciones.