我有以下内容:
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
。
答案 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;
}