Tengo una entidad primaria que contiene una colección de entidades relacionadas (una a muchas). El siguiente es un ejemplo de código simplificado de mi escenario:
class Secondary {} class Primary { private readonly List<Secondary> _secondaries = new(); public IReadOnlyList<Secondary> Secondaries => _secondaries; } En mi repositorio de EF, estoy tratando de proyectar Primary en un DTO que contiene una CUENTA de entradas Secundarias en su colección:
DbContext.Set<Primary>() .AsNoTracking() .Select(primary => new PrimaryDTO{ SecondaryCount = primary.Secondaries.Count // Access the Count property });Esta consulta produce una excepción: "Referencia de objeto no establecida en una instancia de un objeto". Pero si hago esto en su lugar:
DbContext.Set<Primary>() .AsNoTracking() .Select(primary => new PrimaryDTO{ SecondaryCount = primary.Secondaries.Count() // Call the Count() method });La consulta funciona bien. Pero mi IDE dice que debería acceder a la propiedad en lugar de llamar al método, y muestra los paréntesis junto a la llamada Count() en gris, como si fueran redundantes. Si sigo esas instrucciones, mi código se rompe.
¿Cómo puede uno producir una excepción nula mientras que el otro no? Además, ¿cómo pueden ser nulos primary.Secondaries si mi clase lo inicializa como una lista vacía? Para su información, el uso de Include() para cargar la colección relacionada no altera este comportamiento.