Ваш вопрос труден для понимания, но я считаю, что "проблема" - это исправление объекта EF. Я цитирую «проблему», потому что на самом деле это функция .
EF имеет кэш объектов. Всякий раз, когда вы что-либо запрашиваете, созданные экземпляры хранятся в этом объектном кэше, что позволяет извлекать будущие запросы для тех же экземпляров из этого кэша, вместо того, чтобы снова возвращаться к базе данных.
Когда дело касается отношенийесли EF имеет связанные объекты уже в своем кеше объектов, он выполняет «исправление», где он автоматически добавляет связанные экземпляры в свойство навигации. Опять же, это функция оптимизации, так как теперь вам не нужно создавать другой запрос для их получения.
Единственный способ обойти это - использовать AsNoTracking
при запросе. Например:
var companies = await _context.Companies.AsNoTracking().ToListAsync();
При AsNoTracking
EF не будет поддерживать кэш объектов и не будет отслеживать изменения этих объектов. Эта последняя часть важна, потому что вам нужно быть очень осторожным, если вы попытаетесь каким-либо образом изменить эти объекты, так как EF не будет знать о них, пока вы явно не присоедините их. Однако, если вы просто выполняете чтение, использование AsNoTracking
на самом деле более эффективно в любом случае.