Я пытаюсь найти лучший и быстрый способ вставить довольно массивное количество данных (~ 50K строк), чем Linq, который я использую сейчас. Данные, которые я пытаюсь записать на локальный db, находятся в списке данных, преобразованных в ORM, сериализованных и полученных из WCF. Я заинтересован в использовании SqlBulkCopy, но проблема в том, что таблицы нормализованы и фактически представляют собой последовательности или взаимосвязанные таблицы со отношениями "один ко многим".
Вот какой код, который иллюстрирует мою точку зрения:
foreach (var meeting in meetingsList)
{
int meetingId = dbAccess.InsertM(value1, value2...);
foreach (var competition in meeting.COMPETITIONs)
{
int competitionId = dbAccess.InsertC(meetingid, value1, value2...);
foreach(var competitor in competition.COMPETITORs)
{
int competitorId = dbAccess.InsertCO(comeetitionId, value1,....)
// and so on
}
}
}
где dbAccess.InsertMeeting выглядит примерно так:
// check if meeting exists
int meetingId = GetMeeting(meeting, date);
if (meetingId == 0)
{
// if meeting doesn't exist insert new
var m = new MEETING
{
NAME = name,
DATE = date
}
_db.InsertOnSubmit(m);
_db.SubmitChanges();
}
Заранее благодарим за любые ответы. Боян
Я бы все же использовал SqlBulkCopy
, чтобы быстро скопировать ваши данные из внешнего файла в промежуточную таблицу, которая имеет ту же (плоскую) структуру, что и файл (вам нужно будет создать эту таблицу досрочно)
После загрузки вы можете разделить данные на несколько таблиц, используя, например, хранимая процедура или что-то - должно быть довольно быстро, поскольку все на сервере уже.