我有这两张桌子
[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;
}
此代码在标记表中添加重复值(ID == 3和16相同),但在 DesignsToTags 表中一切正常
如何防止添加重复值?
答案 0 :(得分:0)
终于找到了问题
我需要在获得设计时包含标签
var design = ctx.Designs.Include(m => m.Tags).Single(m => m.ID == model.Id);
而不是
var design = ctx.Designs.Find(model.Id);
一切都很完美。