在插入新的父对象时,阻止EF添加新的子对象而不是仅仅关联?

我有以下内容:

public int CreateExercise(Exercise newExercise) { db.Exercises.Add(newExercise); db.SaveChanges(); return newExercise.ExerciseId; } 

练习如下:

 public class Exercise { public Exercise() { Users = new Collection(); } [Key] [Required] public int ExerciseId { get; set; } [StringLength(300, ErrorMessage = "The value cannot exceed 300 characters. ")] public string Title { get; set; } public virtual ICollection Users{ get; set; } } 

当我创建一个新的练习时,有时预先存在的用户会附带它,包括Id。 即使为这些Users指定了现有的UserId ,也会在此处添加新的User条目。 我只想添加关联,而不是新用户 – 我想EF很聪明,可以解决这个问题吗? 我究竟做错了什么?

我只是试图避免必须遍历所有附加到新练习的用户,在Add之前清除它们,确保它们存在,添加练习,然后添加每个单独的用户,最后调用SaveChanges

重新连接断开连接的实体时,默认情况下它们处于已添加状态。

您可以在附加练习后更改状态。

 public int CreateExercise(Exercise newExercise) { db.Exercises.Add(newExercise); // set all attached users to unchanged. db.ChangeTracker.Entries().ToList().ForEach(p => p.State = EntityState.Unchanged); db.SaveChanges(); return newExercise.ExerciseId; }