在我的ASP.NET Core Web API应用程序中,我无法在Entity Framework Core中关联实体。当我通过Postman向Controller发送GET请求时,将返回所有Model的记录,但其相关实体的导航属性将返回null。不幸的是,也没有抛出任何错误或异常。 (简化)代码如下:
//DBContext
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Location>();
modelBuilder.Entity<Person>(entity =>
{
entity.HasOne(p => p.Location)
.WithMany(l => l.People)
.HasForeignKey(p => p.Location_ID);
});
}
//Person Model
public partial class Person
{
[Key]
public int People_ID { get; set; }
public int? Location_ID { get; set; }
public Location Location { get; set; }
}
//Location Model
public partial class Location
{
public Location()
{
People = new HashSet<Person>();
}
[Key]
public int Location_ID { get; set; }
public ICollection<Person> People { get; set; }
}
据我所知,因为我在OnModelCreating方法中使用Fluent API来确定两个模型是相关的,所以属性应该是“热切地加载”。为什么不发生这种情况?
答案 0 :(得分:1)
据我了解,因为我在OnModelCreating方法中使用Fluent API指示两个模型是相关的,所以属性应该是'Eagerly Loaded'
你理解错了。 Eager Loading行为不是隐式的(如延迟加载),您必须使用Include
/ ThenInclude
方法明确请求它。
例如,以下内容将返回填充了Person
属性的Location
个实体:
return db.Set<Person>().Include(p => p.Location);