.Net EF AddRange对象列表显示为多个查询

问题描述 投票:0回答:1

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

enter image description here

.net list entity-framework linq addrange
1个回答
0
投票

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

你可以使用第三方库(不是免费的)

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

制作批量插入物

context.BulkInsert(list);
© www.soinside.com 2019 - 2024. All rights reserved.