Entity Framework Core - исключить функцию? - PullRequest
0 голосов
/ 10 февраля 2020

Я работаю с 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»?

...