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

C# 在插入新的父对象时,是否阻止EF添加新的子对象而不仅仅是关联?,c#,asp.net-mvc,entity-framework,entity-framework-6,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

我有以下资料:

    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; }
 }
公开课练习{
公众活动({
用户=新集合();
} 
[关键]
[必需]
public int ExerciseId{get;set;}
[StringLength(300,ErrorMessage=“该值不能超过300个字符。”)]
公共字符串标题{get;set;}
公共虚拟ICollection用户{get;set;}
}
当我创建一个新的练习时,有时会有预先存在的用户,包括Id。即使为这些
用户
指定了现有的
用户ID
,这里也会添加新的
用户
条目。我只想添加关联,而不是新用户——我想EF足够聪明,可以解决这个问题吗?我做错了什么


我只是想尽量避免在附加到新练习的所有用户之间循环,在添加前清除它们,确保它们存在,添加练习,然后添加每个用户,最后调用
SaveChanges

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

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

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;
}
public int CreateExercise(Exercise newExercise){
db.Exercises.Add(newExercise);
//将所有连接的用户设置为“未更改”。
db.ChangeTracker.Entries().ToList().ForEach(p=>p.State=EntityState.Unchanged);
db.SaveChanges();
返回newExercise.ExerciseId;
}

如何创建和初始化
练习
实例?EF不会只是将相关项添加到新实体中,除非是您所做的某件事导致了它。@AndrewBarber正在从客户端序列化它,以及关联的、预先存在的usersAhh;我误解了你。我手头上没有,但这样做是有问题的。您正在执行一个
Add()
,因此,除非您告诉EF一些不同的内容,否则它假定需要将整个对象图作为新项目添加到数据库中-如果这些其他实体未被跟踪。您可以做一些事情来指示不添加相关记录,而只是关联。。。别忘了马上。。。