2015-09-14 5 views
0

У меня есть база данных, которая помимо прочего имеет две таблицы данных: -Entity Framework Запись Mass данных в базу данных

Таблица 1

  • ProductID
  • ProductName
  • ProductDescription
  • IsVisible
  • IsDeleted

Таблица 2 - ProductPriceID - ProductID - LocationID - Цена

Таблица 2 может содержать много цены в разных местах для каждого продукта в таблице 1. Читаю из файла CSV где детали продукта перечислены в первых столбцах, за которыми следуют 15 столбцов значений цены для 15 местоположений.

Я обнаружил, что при импортировании каждого из почти 10 000 продуктов, которые записывают этот файл в базу данных, сначала записывая продукт, а затем записывая список из 15 цен в Таблицу 2, 10000 раз по сравнению с замедлением импорта вниз HUGELY. Это замедляет его на 2,5 раза по сравнению с «попытками» записать в список из 10000 продуктов, а затем около 132 000 цен на товары. Имея 2 записи в базу данных, значительно ускоряется весь процесс, так как время задержки возникает в базе данных, поэтому писать 2 раза вместо 20 000 раз намного проще.

Я создал списки типов баз данных для каждого объекта и добавил данные к каждому, и это нормально. Проблема заключается в ProductID в таблице 2. Entity Framework не возвращает это, пока я не позову

context.Products.Add(productList); 
context.Save(); 

Но в точке это сохраняется, список цен на продукцию уже создан, но без соответствующего ProductID значений. Когда он экономит, он падает из-за ограничения внешнего ключа.

Есть ли в любом случае Entity Framework для получения ProductID, который будет присвоен этому продукту, не запивая каждый продукт в базу данных? Здесь важны минимальные номера вызовов в базе данных.

У меня есть возможность повторного анализа всех данных из файла, но я также не увлекаюсь этим, поскольку это дополнительное время обработки. Структура файла не сможет быть изменена.

+0

вы можете посмотреть пакет пакетной вставки https: //efbulkinsert.codeplex.com/ – wvisaacs

+0

Блестящее спасибо за ваш совет! Я отправлю ответ, как только я получу где-нибудь. –

ответ

0

Я взвесил все варианты, и это оказалось лучшим способом для нас сделать, заключалось в том, чтобы написать все продукты в один список, все цены на продукцию с известным кодом продукта в другой список.

Затем мы сохранили список продуктов в базе данных и затем повторили эти продукты, чтобы вернуть ProductID в соответствие с кодом продукта, который соответствует локальному списку, прежде чем сохранять список цен на товары в базе данных.

2 сохраняет базу данных и один звонок из базы данных, и мы сократили импорт данных за 47 минут до 3 минут.

Спасибо за помощь!

Смежные вопросы