我的理解是,要轻松地将对象列表添加到数据库,您可以将它们添加到列表中,然后只需调用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();
}
}
答案 0 :(得分:0)
实体框架的行为是每次添加生成一个插入。
您可以使用第三方库(不是免费的)
http://entityframework-extensions.net/bulk-insert
进行批量插入
context.BulkInsert(list);