首先不要保存多对多代码Db

时间:2016-12-27 12:01:32

标签: c# sql-server asp.net-mvc entity-framework ef-code-first

我首先使用代码,而且流畅的api这是我的模型

public Admin()
        {
            this.course = new HashSet<Courses>();
        }
   [Key]
   public int ID { get; set; }
   public string LoginName { get; set; }
   public virtual ICollection<Courses> course { get; set; }
}

 public Courses()
            {
                this.admin = new HashSet<Admin>();
            }
      [Key]
      public int ID { get; set; }
      public string Name { get; set; }
      public virtual ICollection<Admin> admin { get; set; }
    }

这是流利的api

modelBuilder.Entity<Admin>()
                .HasMany(e => e.course)
                .WithMany(e => e.admin);

这是我的控制器,我从cshml

获取了该路径
  public ActionResult Admins( Admin rec, IList<int> CourseId)
  {

      foreach (var item in CourseId)
        {
            var cr = new Courses();
            cr.ID = item;
            rec.course.Add(cr);
 }
  db.Admins.Add(rec);
  db.SaveChanges();

当我尝试保存db.SaveChanges()

时,它会给我错误

任何人都可以告诉我这里有什么问题吗?

错误消息

  

一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性

1 个答案:

答案 0 :(得分:2)

问题是EF假设您添加到Courses的{​​{1}}个实例是新的。您需要让EF使用Admin.course方法或DbSet<T>.Attach属性将其视为已存在:

DbEntityEntry.State