c# – 具有多对多未加载集合属性的实体

c# – 具有多对多未加载集合属性的实体,第1张

概述我有一个实体名册,有一系列球员. public class Roster{ public Roster() { Players = new List<Player>(); } public int RosterId { get; set; } [MaxLength(100)] [Required] public stri 我有一个实体名册,有一系列球员.

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 - PlayersmodelBuilder.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.RosterIDINNER 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();
总结

以上是内存溢出为你收集整理的c# – 具有多对多未加载集合属性的实体全部内容,希望文章能够帮你解决c# – 具有多对多未加载集合属性的实体所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1222224.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存