Comportamiento del cargador diferido de EF Core con entidades nuevas
Los documentos de EF Core sobre “carga vaga sin proxies” hacen referencia a este ejemplo:
public class Blog
{
private ICollection<post> _posts;
public Blog()
{
}
private Blog(ILazyLoader lazyLoader)
{
LazyLoader = lazyLoader;
}
private ILazyLoader LazyLoader { get; set; }
public int Id { get; set; }
public string Name { get; set; }
public ICollection<post> Posts
{
get => LazyLoader.Load(this, ref _posts);
set => _posts = value;
}
}
Así que tenemos un constructor sin parámetros y un constructor de inyección de cargador vago. Luego, los documentos dicen lo siguiente:
Este método no requiere que los tipos de entidad hereden ni que las propiedades de navegación sean virtuales, y permite que las instancias de entidad creadas con
new
se carguen en forma vaga una vez que se adjuntan a un contexto.
Entonces, ¿qué significa esto exactamente para las nuevas instancias? Una entidad creada por EF Core tendrá el cargador vago inyectado, pero una entidad new
no lo tendrá. ¿Esto implica que una vez que se agrega un nuevo ítem al contexto, el campo de respaldo del cargador vago debería actualizarse?
davy.ai
El ejemplo en la documentación de EF Core sobre la carga diferida sin proxies muestra una clase
Blog
con un constructor sin parámetros y un constructor separado que acepta unILazyLoader
. La propiedadPosts
utiliza el cargador diferido para cargar la colección_posts
solo cuando se accede a ella.Según la documentación, este enfoque permite que incluso las nuevas instancias de entidades (es decir, creadas con
new
en lugar de por EF Core) carguen de forma diferida sus datos relacionados una vez que estén adjuntas a un contexto, sin necesidad de heredar los tipos de entidades ni de que las propiedades de navegación sean virtuales.Sin embargo, no se especifica explícitamente cómo se debe actualizar el campo de respaldo del cargador diferido una vez que se agrega una nueva entidad al contexto. Puede ser responsabilidad del desarrollador asegurarse de que esto suceda, o el comportamiento puede variar según la implementación específica.