c# – 具有多对多未加载集合属性的实体
发布时间:2020-12-16 00:04:23 所属栏目:百科 来源:网络整理
导读:我有一个实体名册,有一系列球员. public class Roster{ public Roster() { Players = new ListPlayer(); } public int RosterId { get; set; } [MaxLength(100)] [Required] public string RosterName { get; set; } public ICollectionPlayer Players { get
我有一个实体名册,有一系列球员.
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 我错过了什么? 解决方法
将Players属性设置为虚拟,以便EF可以延迟加载集合.
public class Roster { //........... public virtual ICollection<Player> Players { get; set; } } 或者,您可以加载Players集合. var rosters = db.Rosters.Include(r => r.Players).ToList(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |