子元素上的C#代码优先导航返回Null
导航功能可以从地址、电话到人。我无法让人们获得任何导航属性的地址或电话。“联系人”中的“我的导航”属性对电话和地址显示为空 请告知。使用E.F 4.5子元素上的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
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
中的属性重命名为复数形式(地址、电话)