Массовая вставка слов в базу данных asp. net MVC Codefirst - PullRequest
0 голосов
/ 12 марта 2020

Мне нужно вставить более 70000 слов в дБ, я пытаюсь сделать это сначала. это то, что я сделал до сих пор, но это не похоже на работу. Есть идеи?

protected override void Seed(AnagramBritAZ.DAL.AnagramContext context)
        {
            //  This method will be called after migrating to the latest version.
            context.Configuration.AutoDetectChangesEnabled = false;
            context.Configuration.ValidateOnSaveEnabled = false;
            var anagrams = new List<Anagram>
            {
                new Anagram { Name = "anagram3"},
                new Anagram { Name = "anagram4"}
            }; // this was for testing to see if adding these works

            List<string> wordslist = System.IO.File.ReadLines(@"C:\Users\etc\brit.txt").ToList();

            foreach (string word in wordslist)
            {
                anagrams.Add(new Anagram { Name = word });
            }


            anagrams.ForEach(c => context.Anagrams.AddOrUpdate(p => p.Name, c));
            context.SaveChanges();
        }

РЕДАКТИРОВАТЬ: Кажется, работает после того, как я подождал несколько минут, я думаю, обновление БД заняло больше времени, чем я ожидал. Вопрос будет в том, что это лучший способ добавить эти слова 70 КБ в БД? или есть лучший способ? (это был тест для компании в качестве предварительного собеседования)

1 Ответ

0 голосов
/ 12 марта 2020

Вы можете использовать AddRange метод.

Пример:

List<string> wordslist = System.IO.File.ReadLines(@"C:\Users\etc\brit.txt").ToList();

var anagrams= wordslist.Select(word=> new Anagram{
    Name = word
    }).ToList();

using(var context= new AnagramBritAZ.DAL.AnagramContext())
{
    context.Anagrams.AddRange(anagrams);
     context.SaveChanges();
}
...