Раньше, когда моему приложению требовалось вставить много записей в базу данных SQL 2000, я вызывал хранимую процедуру, один раз для каждой записи. Вставляя много записей, я обнаружил, что производительность пострадала, особенно при использовании толстого клиента, вызывающего веб-службу для выполнения вызова базы данных.
Затем я узнал, что если я передаю данные XML, представляющие много записей, то SQL 2000 может сохранить их во временную таблицу, и я могу эффективно обрабатывать записи в таблице XML, используя один SQL, который работает со всеми строками временной переменной. стол одновременно. Это уменьшило количество обращений к SP до одного, а также стало более эффективным, поскольку команды обновления SQL работали с несколькими записями одновременно.
Мне лично нравится использовать слой Business Objects (BO), и у меня нет опыта работы с LINQ или Entity Framework, поэтому на данный момент давайте предположим, что эти инструменты находятся вне области видимости ...
В моем слое BO я обычно добавляю функцию «ToDataset» к объекту, чтобы преобразовать объект в набор данных с одной таблицей в нем, где эта таблица содержит одну строку данных. Именно само датаро содержит представление данных в объекте.
Тогда у меня будет класс коллекции, например, коллекция предыдущего объекта. Он также будет иметь метод "ToDataset" для создания представления всех объектов в классе коллекции. Эта функция будет перебирать объекты в коллекции, и для каждого вызывать функцию «ToDataset» объектов и объединять эту информацию в «накапливающийся» набор данных.
Когда я хочу передать все записи в классе коллекции в SP, я бы вызвал метод ToDataset класса Collection и передал XML для ds в SP.
Чтобы уменьшить размер этого поста, я постараюсь воздержаться от дальнейшего обоснования этого подхода и открою себя для ваших предложений.
Как хорошие разработчики делают такие вещи?
В следующем примере кода вы увидите, как я пытаюсь определить свои объекты так, чтобы они могли быть вложенными, но когда вы вызываете функцию Todataset для родительского объекта, все дочерние объекты свернуты в него с использованием шаблона определяется базовым классом. (Код не такой длинный, может быть, я должен опубликовать его. Если меня разжигут, я отправлю его)
Я ожидаю некоторых ужасных реакций. Будь добрым. : -)
Спасибо за ваш интерес к прочтению этого до конца.
http://sites.google.com/site/dokmanc/Home/ObjectToDataset.zip?attredirects=0