子元素上的C#代码优先导航返回Null

子元素上的C#代码优先导航返回Null,c#,ef-code-first,C#,Ef Code First,导航功能可以从地址、电话到人。我无法让人们获得任何导航属性的地址或电话。“联系人”中的“我的导航”属性对电话和地址显示为空 请告知。使用E.F 4.5 public class Person { [Key] public int PersonID { get; set; } [Required] public string FirstName { get; set; } [Required] public string LastName { get

导航功能可以从地址、电话到人。我无法让人们获得任何导航属性的地址或电话。“联系人”中的“我的导航”属性对电话和地址显示为空

请告知。使用E.F 4.5

public class Person
{
    [Key]
    public int PersonID { get; set; }
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    public string FullName
    {
        get
        {
            return string.Format("{0} {1}", this.FirstName, this.LastName);
        }
    }
    public string Email { get; set; }
    public virtual ICollection<Address> Address { get; set; }
    public virtual ICollection<Phone> Phone { get; set; }
}

public class Phone
{
    [Key]
    public int PhoneID { get; set; }
    public int PersonID { get; set; }
    public virtual Person Person { get; set; }
    [Required]
    public string PhoneNum { get; set; }
    [Required]
    public int PhoneNumTypeID { get; set; }
}

public class Address
{
    [Key]
    public int AddressID { get; set; }
    public int PersonID { get; set; }
    public virtual Person Person { get; set; }
    [Required]
    public string Street { get; set; }
    public int AddressTypeID { get; set; }
    public virtual AddressType AddressType { get; set; }
}

public class AddressType
{
    [Key]
    public int AddressTypeID { get; set; }

    [Required]
    public string AddressTypeDesc { get; set; }
}

public class ContactContext : DbContext
{
    public ContactContext() : base("Contact") { }
    public DbSet<Person> People { get; set; }
    public DbSet<Address> Addresses { get; set; }
    public DbSet<Phone> Phones { get; set; }
    public DbSet<AddressType> AddressTypes { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Address>()
            .HasRequired(x => x.Person)
            .WithMany()
            .HasForeignKey(x => x.PersonID);

        modelBuilder.Entity<Phone>()
            .HasRequired(x => x.Person)
            .WithMany()
            .HasForeignKey(x => x.PersonID);

        modelBuilder.Entity<Address>()
            .HasRequired(x => x.AddressType)
            .WithMany()
            .HasForeignKey(x => x.AddressTypeID);

        base.OnModelCreating(modelBuilder);
    }
}
公共类人物
{
[关键]
公共int PersonID{get;set;}
[必需]
公共字符串名{get;set;}
[必需]
公共字符串LastName{get;set;}
公共字符串全名
{
收到
{
返回string.Format(“{0}{1}”,this.FirstName,this.LastName);
}
}
公共字符串电子邮件{get;set;}
公共虚拟ICollection地址{get;set;}
公共虚拟ICollection电话{get;set;}
}
公用电话
{
[关键]
公共int PhoneID{get;set;}
公共int PersonID{get;set;}
公共虚拟人{get;set;}
[必需]
公共字符串PhoneNum{get;set;}
[必需]
public int PhoneNumTypeID{get;set;}
}
公共课堂演讲
{
[关键]
public int AddressID{get;set;}
公共int PersonID{get;set;}
公共虚拟人{get;set;}
[必需]
公共字符串Street{get;set;}
public int AddressTypeID{get;set;}
公共虚拟地址类型地址类型{get;set;}
}
公共类地址类型
{
[关键]
public int AddressTypeID{get;set;}
[必需]
公共字符串AddressTypeDesc{get;set;}
}
公共类ContactContext:DbContext
{
public ContactContext():基(“联系人”){}
公共数据库集人物{get;set;}
公共数据库集地址{get;set;}
公共数据库集电话{get;set;}
公共数据库集地址类型{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasRequired(x=>x.Person)
.有很多
.HasForeignKey(x=>x.PersonID);
modelBuilder.Entity()
.HasRequired(x=>x.Person)
.有很多
.HasForeignKey(x=>x.PersonID);
modelBuilder.Entity()
.HasRequired(x=>x.AddressType)
.有很多
.HasForeignKey(x=>x.AddressTypeID);
基于模型创建(modelBuilder);
}
}
更改映射:

modelBuilder.Entity<Address>()
    .HasRequired(x => x.Person)
    .WithMany(p => p.Address)         // changed here
    .HasForeignKey(x => x.PersonID);

modelBuilder.Entity<Phone>()
    .HasRequired(x => x.Person)
    .WithMany(p => p.Phone)         // changed here
    .HasForeignKey(x => x.PersonID);
modelBuilder.Entity()
.HasRequired(x=>x.Person)
.WithMany(p=>p.Address)//在此处更改
.HasForeignKey(x=>x.PersonID);
modelBuilder.Entity()
.HasRequired(x=>x.Person)
.WithMany(p=>p.Phone)//在此处更改
.HasForeignKey(x=>x.PersonID);
顺便说一下,我会将
Person
中的属性重命名为复数形式(地址、电话)