2012-08-24 318 views
0

内部vb.net ORM是使用存储过程开发的,以获取数据来填充复杂层次结构中的单个对象。我们已经从每个映射操作的存储过程转移到在运行时建立并执行的动态SQL,这应该增加功能和性能。每个类都有自己的映射代码,说明属性为db列映射,表,基数等。ORM将数据映射到对象

我的问题是,由于对象模型的复杂性,由ORM /映射器代码构建的对象将调用更多的数据比需要,从而妨碍性能。

这是对象模型或ORM还是两者的问题?

有人可以提出一个设计模式/想法来帮助管理这个问题吗?

我的第一个想法是,我们应该有额外的功能出映射类来控制数据检索的深度,但我怎么可能干净地实现我不知道。任何有关这个问题的想法或想法都将大受欢迎。

+0

通过更多的数据,你的意思是一个对象的关系数据,你存储为一个属性(单行或多行?) –

+0

我希望这是有道理的,但通过更多的数据,我的意思是映射类和后续子映射类基于对象层次结构构建单个sql语句,这可能意味着您在单个调用中获得100行数据。将其返回并映射回具有100个孩子的单个对象作为示例。问题在于每个对象都有自己的映射,以便类A将使用类b的映射,等等。当我可能只需要a和b类。问题在于性能和递归的可能性。 – Richard

+0

我会延迟抓取去为Vikdor建议,也看看Repository模式和[短小精悍点网(http://code.google.com/p/dapper-dot-net/) –

回答

0

像Hibernate这样的ORM使用"Lazy Fetch" strategy来处理这个场景,其中任何深度的对象关联都保持不变,但是当第一次访问层次结构中的对象时,它们是按需获取的。您可能想看看Proxy Pattern以了解如何完成此操作。