EF Core从元数据获取反向导航属性

时间:2019-04-19 05:41:03

标签: c# entity-framework-core system.reflection

请考虑使用模型TodoItemPerson进行以下设置

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.ReviewerPerson.ReviewItem“反相关”

我想我想弄清楚如何访问modelBuilder.Hasxxx( ... ) and modelBuilder.Withxxx( ... )方法中设置的配置。

之所以需要它,是因为我要遍历嵌套数据结构的查询结果集,并且需要确保我的算法具有前瞻性。

1 个答案:

答案 0 :(得分:2)

EF INavigation界面表示EF Core元数据中的导航。可以使用IEntityTypeGetNavigations扩展方法从FindNavigation获得它们。

一旦有了INavigation,就可以使用FindInverse扩展方法获得反向导航(如果存在)。

您可以在我对Entity Framework Core 2.0.1 Eager Loading on all nested related entities的回答中看到遍历示例导航。