EF Core 6: implementing Lazy Loading Related to Detached Entities and Proxy Creation
Does anyone know how to I'm performance testing and I'm prototyping a solution and I'm currently working with Entity Framework Core 6 and have enabled lazy loading for my entities. However, I'm running into some issues when trying to access navigation properties of detached entities. I have a scenario where I load a parent entity, but when I access a navigation property that should trigger lazy loading, I get a `System.InvalidOperationException: The proxy for 'ChildEntity' want to be created because it is not a tracked entity.` Hereโs a simplified example of my setup: ```csharp public class ParentEntity { public int Id { get; set; } public virtual ICollection<ChildEntity> Children { get; set; } } public class ChildEntity { public int Id { get; set; } public int ParentId { get; set; } public virtual ParentEntity Parent { get; set; } } ``` Iโm retrieving the parent entity in the following way: ```csharp using (var context = new MyDbContext()) { var parent = context.Parents.FirstOrDefault(p => p.Id == parentId); } ``` After this, I detach the parent entity explicitly using `context.Entry(parent).State = EntityState.Detached;`. Later, when I try to access `parent.Children`, I encounter the behavior mentioned above. I expected EF Core to load the children when I access them, but it seems like the detached state is causing issues with proxy creation. Iโve tried reattaching the parent entity before accessing the children, but that doesnโt seem to help: ```csharp using (var context = new MyDbContext()) { context.Parents.Attach(parent); var children = parent.Children.ToList(); // Still throws InvalidOperationException } ``` Is there a way to work around this scenario while still leveraging lazy loading? Or should I consider alternatives like eager loading or explicitly loading related entities to avoid this question? Any insights or best practices would be greatly appreciated! I'm coming from a different tech stack and learning C#. For context: I'm using C# on Debian. Am I missing something obvious? For context: I'm using C# on Ubuntu 22.04. What's the correct way to implement this?