我的理解是,要轻松地将对象列表添加到数据库中,您可以将它们添加到列表中,然后只需调用 AddRange,然后调用 SaveChanges 即可在一个查询中完成此操作。然而,我们正在使用分析器,并看到它将列表中的所有项目转换为单独的插入语句。
我对 AddRange 如何工作的想法是错误的还是有其他问题?我真的以为我会看到一个插入语句,而不是列表中的许多项目。
在下面的代码中,我们添加了一个 LearningPath,然后将课程添加到此学习路径中。起初我认为它可能与每个 LearningPathLesson 查询以查找 LessonPathId 有关,但是当我移动它时它仍然没有解决问题。
public static void SaveLearningPath(LearningPathSaveModel model)
{
using (var db = new ServerDBEntities())
{
var now = DateTimeOffset.Now;
var learningPath = new LearningPath()
{
Id = string.IsNullOrEmpty(model.id) ? Guid.NewGuid().ToString() : model.id,
Name = model.name,
Created = now,
Updated = now
};
if (model.defaultLearningPath)
{
learningPath.IsDefault = true;
var previousDefault = db.LearningPaths.FirstOrDefault(l => l.IsDefault == true);
if (previousDefault != null)
{
previousDefault.IsDefault = false;
}
}
db.LearningPaths.Add(learningPath);
db.SaveChanges();
string lpId = learningPath.Id;
var learningPathLessons = new List<LearningPathLesson>();
for (var i = 0; i < model.lessonIdsInLearningPath.Count; ++i)
{
var id = model.lessonIdsInLearningPath[i];
learningPathLessons.Add(new LearningPathLesson()
{
Id = Guid.NewGuid().ToString(),
LessonId = id,
LearningPathId = lpId,
Order = i + 1,
Created = now,
Updated = now
});
}
//db.LearningPaths.Add(learningPath);
db.LearningPathLessons.AddRange(learningPathLessons);
db.SaveChanges();
}
}