Я работаю с Entity Framework Core. Что меня озадачивает, так это то, что когда вы устанавливаете связь между двумя таблицами базы данных, происходит двунаправленное отображение. Поэтому, когда вы попытаетесь загрузить таблицу и использовать явную / явную загрузку, вы в конечном итоге получите ошибку бесконечной глубины SQL при попытке попасть в конечную точку.
В моем проекте есть объект под названием Компания и Проекты. У компании есть много проектов, но у каждого проекта есть только одна компания. У меня есть эти отношения внутри моего контекста БД:
entity.HasOne(d => d.Company)
.WithMany(p => p.Project)
.HasForeignKey(d => d.CompanyId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Project_Company");
Когда я использую энергичную загрузку, я хочу включить «Проект», когда я достигаю конечную точку Компании в моем REST API:
var test = _context.FrmCompany
.Include(FrmCompany => FrmCompany.FrmProject)
.ToList();
Однако, у 'Project' есть поле 'Company', которое затем вызывает бесконечную самоссылку l oop и достигает максимальной глубины 32 в моем браузере. Я могу выполнить l oop и установить для поля компании внутри проекта значение null, чтобы получить:
foreach (var item in test)
{
foreach (var p in item.Project)
{
p.Company = null;
}
}
Но это кажется неопрятным, и должен быть способ справиться с этим лучше с помощью Entity Framework Core. Это проблема с настройкой моей базы данных? (сначала его база данных, и я не могу ее сильно изменить) Или это проблема с моей реализацией EF Core? Любая идея, что я могу сделать, чтобы пройти мимо этого? Есть ли тег типа исключения, который я могу использовать, чтобы сказать «Не загружать компанию» внутри «Company.Project»?