Ale*_*ill 3 c# entity-framework metadata entity-framework-6
我正在尝试使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
他们都建议使用该NavigationProperty.GetDependentProperties()
方法,但我不能让它返回任何东西:
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 :(
Run Code Online (Sandbox Code Playgroud)
我已确保配置上下文以明确说明属性Person.AddressId
的外键这一事实Person.Address
.我在这里错过了什么?