我想知道填充具有子对象集合的对象的最佳方法,每个子对象可以反过来具有来自数据库的对象集合,而无需多次调用数据库来获取每个对象的子对象。基本上,在分层格式中,例如,客户有订单,每个订单都有订单项目。是以xml格式(SQL server 2005)检索数据,还是通过将相关表联接在一起然后将数据映射到对象来检索数据集?提前感谢您的帮助。
发布于 2010-05-04 17:10:25
仍然有很多变量:
当然,您可以对所有的customers->orders->order items进行连接,并在代码中分解所有内容,但这似乎会在重复的父行中产生大量开销,并在处理如此大的混乱时进行大量工作。
尝试避免执行多个调用可能是一种未成熟的优化。您是否因为对数据库调用过多而遇到性能问题?
编辑:根据您的评论,您应该能够对每个层次结构级别执行一个查询:
Select * from orders
where orders.customerid = my_customer_id
--执行一些orm映射,并生成子对象ids的列表--
Select * from child_order_object
where child_order_object_id in (list of child object ids)
--进行更多的ORM映射,并将子对象链接到以前的父对象--
..。
--重复以获取更多级别--
您应该能够在每个关系级别上只有一个查询,而不是通过id只获得一个对象的爆炸性数量的查询。
发布于 2010-05-04 17:04:33
您可能会看到NHibernate和Entity Framework等专为此类场景设计的ORM。
发布于 2010-05-04 17:14:40
MS SQL 2005支持可用于此目的的公用表表达式。基本上,它们允许您执行递归查询。在CTE / MS上进行关键字搜索,你会发现很多这样的东西:Apply a recursive CTE on grouped table rows (SQL server 2005)
https://stackoverflow.com/questions/2767323
复制相似问题