我有一个拥有一系列玩家的实体名册。
public class Roster
{
public Roster()
{
Players = new List<Player>();
}
public int RosterId { get; set; }
[MaxLength(100)]
[Required]
public string RosterName { get; set; }
public ICollection<Player> Players { get; set; }
}
public class Player
{
public int PlayerId { get; set; }
[MaxLength(100)]
[Required]
public string PlayerName { get; set; }
public virtual ICollection<Roster> Rosters { get; set; }
}
我使用流畅的api
定义了关系// many to many Roster - Players
modelBuilder.Entity<Roster>()
.HasMany(t => t.Players)
.WithMany(t=>t.Rosters)
.Map(m =>
{
m.ToTable("RosterPlayers");
m.MapLeftKey("RosterId");
m.MapRightKey("PlayerId");
});
我可以将玩家保存到这样的名单
var roster = rosterRepository.GetById(rosterId);
var player = playerRepository.GetById(playerId);
roster.Players.Add(player);
rosterRepository.Update(roster);
...
但是,当我检索名单时,不会加载玩家收藏。我验证了数据是否存在所有正确的值,并且以下sql会提供数据。
SELECT * from Rosters r
INNER JOIN RosterPlayers rp on r.RosterId = rp.RosterId
INNER JOIN Players p ON p.PlayerId = rp.PlayerId
我错过了什么?
答案 0 :(得分:12)
将Players
属性设为虚拟,以便EF可以延迟加载集合。
public class Roster
{
//...........
public virtual ICollection<Player> Players { get; set; }
}
或者,您可以急切加载Players
集合。
var rosters = db.Rosters.Include(r => r.Players).ToList();