#realJSOP
У меня никогда не было проблем с производительностью sql server, которые не были вызваны чем-то, что я сделал. Я не использую табличные параметры.
Вы можете либо повторить список и сохранить onbjects по одному за раз, либо сделать так, как предложил первый ответ, и сериализовать все данные в xml и передать XML в сохраненный proc. Я сам предпочитаю раздельные звонки, но это только я.
glitteringsound
Ранее я использовал entity framework для сохранения 100K rocords в базе данных, где каждый recod дополнительно содержит дочерние записи.
моя иерархия объектов такова :
открытый класс груза
{
....
List & lt;consignmentaddress> addresses {get; set;}
List & lt;consignmentline & gt; lines { get; set; }
}
Я мог бы ожидать, что количество партий = 100 тысяч, и каждая партия могла бы содержать 2 линии партий и в среднем 3 адреса партий.
Таким образом, все это составляет примерно = 100K + 200K + 300K = 600K записей .
Для вставки всех этих 600K записей я использовал entity framework, и это было чертовски медленно. Затем я разделил файл на куски и проанализировал 1000 записей и вставил их с помощью EF, каждый раз воссоздавая контекст. Это было очень хорошо . Но все же это не полностью удовлетворяет моему требованию ( так как в будущем я мог бы ожидать 500 тысяч записей корневого уровня, и каждая последующая запись могла бы содержать 3-4 дочерние записи в каждом списке. Это может сделать 1200K записей в базе данных).
Теперь мне нужно быстрое и эффективное решение.
Вот почему я хочу отправить всю иерархию сразу, чтобы я мог повторить эту коллекцию внутри SQL и вставить родительские дочерние записи. Поскольку это было бы близко к металлу, это было бы в 10 раз быстрее, чем entity framework.
Но в данный момент я повторяю этот список "консигнация" из .NET C# в цикле, и для каждой консигнации, наряду с ее дочерними элементами ( т. е. List<consignmentaddress>, List<consignmentline>), Я вызываю хранимую процедуру и отправляю эти 3 как TVP ( 1 для консигнации, 2-й для List<consignmentaddress>, 3-й для List<consignmentline>). Эта процедура также очень медленная. Потому что для 100K корневых записей происходит 100K вызовов хранимых процедур.
Теперь мне нужно решение, которое берет всю иерархию или, по крайней мере, какой-то кусок и выталкивает все данные сразу, сохраняя целые отношения родителя и ребенка нетронутыми.