【问题标题】:Add item to many to many entity in Entity Framework将项目添加到实体框架中的多对多实体
【发布时间】:2021-05-18 22:07:42
【问题描述】:

所以我有这两个实体

public class Player
{
        [Key]
        public Guid Id { get; private set; }
        public Guid ActiveGroupId { get; set; }
        public virtual Group ActiveGroup { get; set; }
        public virtual ICollection<Group> Groups { get; set; }
}

public class Group
{
        [Key]
        public Guid Id { get; private set; }
        public string Name { get; set; }
        public virtual ICollection<Player> Players { get; set; }
}

所以我现在想做的是在 Configuration.Seed 中,如果玩家有 ActiveGroup 并且还没有组。然后将活动组添加到 Player.Groups。现在我总是因为错误Multiplicity constraint violated. The role 'Player_Groups_Source' of the relationship 'Entities.Player_Groups' has multiplicity 1 or 0..1.而失败 这就是我所做的

foreach (var player in context.Players.ToList())
{
    var activeGroup = context.Groups.First(x => x.Id == player.ActiveGroupId);
    player.Groups.Add(activeGroup);
}
context.SaveChanges();

我正在使用 EF 6.4.4 并在 mac 上运行它(如果有的话)。知道这种方法有什么问题吗?

【问题讨论】:

    标签: c# asp.net entity-framework entity-framework-6 ef-code-first


    【解决方案1】:

    您需要确保您的 ManyToMany 关系定义正确

    public class PlayerMap : EntityTypeConfiguration<Player>
        {
            public PlayerMap()
            {
                HasMany(a => a.Groups)
                    .WithMany(a => a.Players);
            }
        }
    

    然后你需要初始化Groups的集合:

    public class Player
    {
        [Key]
        public Guid Id { get; private set; }
        public Guid ActiveGroupId { get; set; }
        public virtual Group ActiveGroup { get; set; }
        public virtual ICollection<Group> Groups { get; set; } = new List<Group>();
    }
    

    然后您可以将组添加到播放器。

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      相关资源
      最近更新 更多