Я хотел бы знать, как лучше всего заполнить структуру иерархии бизнес-объектов (родительский / дочерний / внучатый) из одного вызова базы данных.
Я могу придумать пару способов сделать это с головы до ног, например:
левое соединение всех отношений в моем операторе sql, затем используйте цикл и логику для заполнения бизнес-объектов
или же
используйте несколько операторов select и 1 средство чтения данных и используйте его метод NextResult () для итерации по каждому набору результатов и заполнения соответствующих BO
Просто интересно, что для этого лучше всего
Я использую DAAB и C# для своего DAL
Спасибо!





DataReader NextResult - лучший вариант, поскольку объем данных, проходящих по каналу, не растет так быстро, как это может сделать подход соединения.
Раньше я использовал несколько возвращаемых наборов данных, но накладные расходы и постоянно меняющиеся API для этого наконец позволили мне вернуться к использованию только объединений, чтобы вернуть все это одним глотком.
Я слежу за размерами набора результатов, но в контексте любого приложения, с которым я сталкивался, это не было проблемой. В целом я не пожалел об этом, но YMMV.
Множественные наборы результатов могут быть получены особенно быстро, если предложения выбора родительского уровня включают правила выбора дочернего уровня.
Таким образом обрабатываются все случаи; его разделение иногда работает, но в некоторых случаях вам могут понадобиться запросы с одним набором; и хорошо иметь только один шаблон - особенно если вы иногда застреваете при рефакторинге от одного к другому.
В итоге вы получаете меньше обращений к базе данных, а управление транзакциями становится проще.
Универсального рецепта нет. Это зависит от схемы базы данных, размера базы данных и количества записей, которые ваше приложение читает в типичном сценарии. Здесь у вас есть два процесса:
Получение данных из базы данных на несколько порядков медленнее, чем создание объектов в памяти. Лучшим способом было бы создать операторы выбора для максимально быстрого доступа к данным.
Запросы можно строить тремя способами:
Вы должны решить, какое решение приемлемо. Некоторые ключевые моменты, которые следует учитывать:
Вы рассматривали возможность использования OR Mapper, такого как NHibernate? Активная загрузка может сделать то, что вы просите, за один вызов базы данных.
Если OR Mapper не подходит, я бы проголосовал за datareader.NextResultSet.
если все строки взяты из одной таблицы (или кажутся), то вы можете вытащить данные в набор данных с унарными отношениями, и ADO.NET свяжет для вас иерархию
можете уточнить свой вопрос ?? Вы говорите о бизнес-объектах, а затем говорите о SQL. По крайней мере, я запутался.