【问题标题】:duplicate rows in many to many relation EF 5.0多对多关系 EF 5.0 中的重复行
【发布时间】:2014-05-19 13:18:35
【问题描述】:

我有这两张桌子

[Table("Designs")]
public class Design
{
    [Key]
    public Int64 ID { get; set; }
    public string Title { get; set; }

    public virtual ICollection<Tag> Tags { get; set; }
}

[Table("Tags")]
public class Tag
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Design> Designs { get; set; }
}

这是我的上下文

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            this.Configuration.ValidateOnSaveEnabled = false;
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<Design>().HasMany(m => m.Tags).WithMany(m => m.Designs).Map(m => { m.MapLeftKey("DesignID"); m.MapRightKey("TagID"); m.ToTable("DesignsToTags"); });
        }

有一些标签

这是交叉表

我尝试更新设计标签

    public Design EditDesign(Design design, int[] newTags)
    {
        var entry = ctx.Entry(design);

        entry.Collection(m => m.Tags).Load();


        design.Tags = newTags.Select(m => ctx.Tags.Find(m)).ToList();

        entry.State = System.Data.EntityState.Modified;
        ctx.SaveChanges();

        return design;
    }

此代码在 Tags 表中添加重复值(ID == 3 和 16 相同),但在 DesignsToTags 表中一切正常

如何防止添加重复值??

【问题讨论】:

    标签: c# entity-framework many-to-many insert-update


    【解决方案1】:

    终于找到问题了

    我需要在获取设计时包含标签

    var design = ctx.Designs.Include(m => m.Tags).Single(m => m.ID == model.Id);
    

    而不是

    var design = ctx.Designs.Find(model.Id);
    

    一切正常。

    【讨论】:

      猜你喜欢
      • 2021-03-03
      • 2021-10-26
      • 1970-01-01
      • 2019-07-18
      • 2021-06-10
      • 1970-01-01
      • 2011-07-30
      • 2021-10-11
      • 1970-01-01
      相关资源
      最近更新 更多