EF Core получает свойство обратной навигации из метаданных - PullRequest
2 голосов
/ 19 апреля 2019

Рассмотрим следующую настройку с моделями TodoItem и Person

modelBuilder.Entity<TodoItem>()
    .HasOne(t => t.Assignee)
    // for simplicity lets assume a Person is assigned to only TodoItem
    .WithOne(p => p.AssignedItem)
    .HasForeignKey(t => t.AssigneeId);

modelBuilder.Entity<TodoItem>()
    .HasOne(t => t.Reviewer)
    .WithOne(p => p.ReviewItem) 
    // for simplicity lets assume a Person owns only one TodoItem
    .HasForeignKey(t => t.ReviewerId);

задумчиво, возможно используя Microsoft.EntityFrameworkCore.Metadata, как я могу понять, что

  • свойство TodoItem.Assignee (как настроено в HasOne( ... )) связано с "свойством обратной навигации" Person.AssignedItem (как настроено в WithOne( ... )
  • и аналогично, свойство TodoItem.Reviewer "обратно связано" с Person.ReviewItem

Наверное, я пытаюсь выяснить, как получить доступ к набору конфигурации в методах modelBuilder.Hasxxx( ... ) and modelBuilder.Withxxx( ... ).

Мне это нужно, потому что я рефлексивно перебираю набор результатов запроса вложенной структуры данных и должен убедиться, что мой алгоритм ориентирован на будущее.

1 Ответ

2 голосов
/ 19 апреля 2019

Навигация в метаданных EF Core представлена ​​интерфейсом INavigation .Они могут быть получены из IEntityType с использованием GetNavigations или FindNavigation методов расширения.

Как только у вас есть INavigation, обратная навигация (если существует)) можно получить с помощью FindInverse метода расширения.

Вы можете увидеть пример обхода навигации в моем ответе на Entity Framework Core 2.0.1 Готовая загрузка всех вложенных связанных сущностей .

...