我创建了这两个类(POCO)...
public class Address
{
public int Id { get; set; }
public string Street { get; set; }
public string Number { get; set; }
public string Neighborhood { get; set; }
public string ZipCode { get; set; }
public int CityId { get; set; }
public virtual City City { get; set; }
}
public class City
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
}
...然后我映射......
public class AddressMap : EntityTypeConfiguration<Address>
{
public AddressMap()
{
ToTable("Address");
HasKey(p => p.Id);
...
...
HasRequired(p => p.City)
.WithMany(p => p.Addresses)
.HasForeignKey(p => p.CityId);
}
}
public class CityMap : EntityTypeConfiguration<City>
{
public CityMap()
{
ToTable("City");
HasKey(p => p.Id);
...
...
HasMany(p => p.Addresses)
.WithRequired(p => p.City)
.HasForeignKey(p => p.CityId);
}
}
然后我用两种方法创建一个类:
FindCityById
返回城市及其各自的地址...... Context.Cities.Find(key)
和GetAllAddresses
(仅用于测试目的) Context.Addresses.ToList()
当我使用FindCityById
时......相关的地址已加载!
当我使用GetAllAddresses
时,CityId
有值,但City始终为空。
ProxyCreationEnabled
和LazyLoadingEnabled
是&#34; true&#34;。
为什么我在地址课程中没有加载城市?
答案 0 :(得分:0)
在 HasRequired 方法后使用 WithRequiredPrincipal 或 WithRequiredDependent 。
查看Entity Framework documentation
在大多数情况下,实体框架可以推断哪种类型是依赖关系,哪种类型是关系中的主体。但是,当关系的两端都是必需的或双方都是可选的时,实体框架无法识别依赖关系和主体。如果需要关系的两端,请在HasRequired方法之后使用WithRequiredPrincipal或WithRequiredDependent。