NavigationProperty.GetDependentProperties() returns 一个空集合

NavigationProperty.GetDependentProperties() returns an empty collection

我正在尝试使用 Entity Framework 的 MetadataWorkspace 来计算导航 属性 的 ID 外键。我的模型如下所示:

public class Person
{
    [Key]
    public int PersonId { get; set; }

    public int AddressId { get; set; }
    public virtual Address Address { get; set; }
}

public class Address
{
    public Address()
    {
        People = new HashSet<Person>();
    }

    [Key]
    public int AddressId { get; set; }

    public virtual ICollection<Person> People { get; set; }
}

class PersonDbContext : DbContext
{
    public DbSet<Person> People { get; set; }
    public DbSet<Address> Addresses { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<Person>()
            .HasRequired(p => p.Address)
            .WithMany(a => a.People)
            .HasForeignKey(p => p.AddressId);
    }
}

我在这里阅读了有关该主题的其他问题: 1 2

他们都建议使用 NavigationProperty.GetDependentProperties() 方法,但我什么也做不到 return:

var context = new PersonDbContext();

var objectContext = ((IObjectContextAdapter) context).ObjectContext;
var metadata = objectContext.MetadataWorkspace;

var navProperties = metadata.GetItems<EntityType>(DataSpace.OSpace)
    .SelectMany(e => e.NavigationProperties)
    .ToList();

// navProperties.Count = 2 (Person.Address and Address.People)

var depProperties = navProperties
    .SelectMany(p => p.GetDependentProperties())
    .ToList();

// depProperties.Count = 0 :(

我已确保配置上下文以明确说明 Person.AddressIdPerson.Address 属性 的外键这一事实。我在这里错过了什么?

我已经弄清楚了 - 我正在使用 DataSpace.OSpace 来检索导航属性。相反,我应该使用 DataSpace.CSpace,这是包含外键映射的概念模型。