我已经看了一百万页,我觉得这应该是微不足道的,但我真的很挣扎。
我正在尝试使用代码优先创建一个 .net Web API,我有两个模型:事件和团队。每个活动都有很多团队,每个团队都会做很多项目。
在我的 /api/GetEvents 请求中,我可以正常获取事件信息,但与该事件关联的团队列表为空
// GET: api/Events
public IQueryable<Event> GetEvents()
{
return db.Events
}
活动:
public class Event
{
public int EventId { get; set; }
[Required]
public string EventTitle { get; set; }
[Required]
public string EventLocation { get; set; }
public string EventTicketPrice { get; set; }
[Required]
public DateTime EventDateTime { get; set; }
[Required]
public ICollection<Team> Teams{ get; set; }
}
团队:
public class Team
{
[Key]
public int TeamId { get; set; }
[Required]
public string TeamName { get; set; }
public string Class { get; set; }
public string TeamLocation { get; set; }
public string TeamWebsite { get; set; }
public ICollection<Event> Events { get; set; }
}
我检查了生成的数据库,中间表在那里,但它没有连接多对多关系。我尝试通过查询将它们连接在一起,但是中间表没有 DbSet 来连接到表。 我错过了什么?
尝试将集合属性设为虚拟:
public virtual ICollection<Team> Teams{ get; set; }
并且:
public virtual ICollection<Event> Events { get; set; }
EF 使用“虚拟”来标记它将尝试为您维护的导航属性,例如延迟加载。如果您不使用 virtual 标记导航属性,则您需要自行确保导航目标已加载。