Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

148
Vistas
Comportamiento extraño al filtrar en Incluir con AsNoTracking

No sé si se espera que sea así, pero pensé que es extraño ya que cambia los resultados de la consulta.

Cuando ejecuto la consulta a continuación, obtengo mi entidad con solo 2 entidades "Mensagens" porque estoy filtrando solo los activos, así que es correcto, tengo 2 entidades activas en mi base de datos y 1 inactiva.

 return await context.Lancamentos .Include(x => x.UsuarioCriacao) .Include(x => x.Mensagens.Where(m => m.Ativo)) .ThenInclude(m => m.MensagemMedias) .ThenInclude(m => m.MediaWhatsapp) .ThenInclude(m => m.TipoMediaWhatsapp) .Include(x => x.Mensagens.Where(m => m.Ativo)) .ThenInclude(x => x.TemplateMensagem) .ThenInclude(t => t.Medias) .ThenInclude(m => m.MediaWhatsapp) .ThenInclude(m => m.TipoMediaWhatsapp) .AsNoTracking() .FirstOrDefaultAsync(l => l.Id == id && l.Ativo);

ingrese la descripción de la imagen aquí

Pero si ejecuto exactamente el mismo comando simplemente eliminando la línea AsNoTracking() me da los 3 registros, tanto activos como inactivos.

ingrese la descripción de la imagen aquí

Pero el EF inactivo no obtiene el ThenInclude continuación. Cambia el comportamiento.

Con AsNoTracking filtra los datos según el filtro que usé en Include

Sin AsNoTracking me trae todos los datos pero filtra si cargará o no los objetos de ThenInclude .

¿Alguien sabe si esto es un comportamiento normal y por qué se comporta así?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Esto se explica en la documentación de inclusión filtrada :

Precaución

En el caso de consultas de seguimiento, los resultados de la inclusión filtrada pueden ser inesperados debido a una corrección de la navegación . Todas las entidades relevantes que se consultaron previamente y se almacenaron en el Rastreador de cambios estarán presentes en los resultados de la consulta de inclusión filtrada, incluso si no cumplen con los requisitos del filtro. Considere el uso de consultas NoTracking o vuelva a crear el DbContext cuando use la inclusión filtrada en esas situaciones.

Entonces, lo más probable es que su contexto no esté limpio al realizar pruebas de seguimiento. E incluso si está limpio, en caso de que se use para ejecutar otras consultas, la corrección de navegación puede cargar algunas entidades de filtro no satisfactorias más tarde , ya que realiza un seguimiento (tiene acceso) a todas las entidades rastreadas.

En general, no puede confiar en el contenido de la propiedad de navegación de una entidad rastreada, ya que puede actualizarse en cualquier momento durante la vigencia del contexto hasta que el contexto se elimine o la entidad se separe del rastreador de cambios. Si necesita un control total, no use consultas de entidad de seguimiento o consultas de proyección de DTO/ ThenInclude , etc. y seleccione exactamente lo que desea (sin Include / luego incluir, simplemente LINQ).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda