2014-04-07 118 views
1

重複行我有這兩個表在多對多關係EF 5.0

[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"); }); 
     } 

有一些標籤

enter image description here

,這是交叉表

enter image description here

我嘗試更新標籤設計

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表一切正常

enter image description here enter image description here

如何防止添加重複值?

回答

0

終於找到我需要包括標籤時,你得到的設計

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

代替

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

,一切完美的作品這個問題