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

时间:2014-06-24 20:47:03

标签: c# asp.net-mvc entity-framework entity-framework-6

我有以下内容:

    public int CreateExercise(Exercise newExercise) {

        db.Exercises.Add(newExercise);
        db.SaveChanges();
        return newExercise.ExerciseId;
    }

练习如下:

public class Exercise {

    public Exercise() {
        Users = new Collection<User>();
    } 

    [Key]
    [Required]
    public int ExerciseId { get; set; }

    [StringLength(300, ErrorMessage = "The value cannot exceed 300 characters. ")]
    public string Title { get; set; }

    public virtual ICollection<User> Users{ get; set; }
 }

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

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

1 个答案:

答案 0 :(得分:2)

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

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

public int CreateExercise(Exercise newExercise) {

    db.Exercises.Add(newExercise);

    // set all attached users to unchanged.
    db.ChangeTracker.Entries<User>().ToList().ForEach(p => p.State = EntityState.Unchanged);

    db.SaveChanges();
    return newExercise.ExerciseId;
}