0

我的理解是,要轻松地将对象列表添加到数据库中,您可以将它们添加到列表中,然后只需调用 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();
        }
    }

在此处输入图像描述

4

1 回答 1

0

实体框架的行为是每次添加生成一个插入。

您可以使用第三方库(虽然不是免费的)

http://entityframework-extensions.net/bulk-insert

进行批量插入

context.BulkInsert(list);
于 2018-03-06T19:20:27.997 回答