我有这样的POCO:
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public Level Level { get; set; }
}
public class Level
{
public int LevelId { get; set; }
public string Name { get; set; }
public ICollection<Student> Students { get; set; }
}
以下是我如何将所有学生保存在一个单一级别:
public void InsertAllFirstLevelStudents(List<Student> students)
{
// Here all students belong to the same level
var level = Utils.GetFirstLevel();
students.ForEach(s => s.Level = level);
context.Students.AddRange(students);
context.SaveChanges();
}
但是在保存时,我收到了这个错误:
实体对象无法被IEntityChangeTracker的多个实例引用
当我单独获取相同级别时,如: context.Levels.FirstOrDefault(l =&gt; l.Name ==“First”); ,没有问题,但当然,它然后执行单独的数据库查询,这是我想要避免的。
可以为此做些什么?
答案 0 :(得分:1)
public class Student
{
public int StudentId { get; set; }
public LevelId {get; set;}
public string Name { get; set; }
[ForeignKey("LevelId")]
public Level Level { get; set; }
}
然后
students.ForEach(s => s.LevelId = level.LevelId);
答案 1 :(得分:1)
您只需将学生添加到该级别的Students
集合即可。
// Here all students belong to the same level
var level = Utils.GetFirstLevel();
foreach (var student in students) {
level.Students.Add(student);
}
context.Students.AddRange(students); // Probably not necessary
context.SaveChanges();