您的位置:首页 > 其它

NHibernate中一对一关联的延迟加载

2012-12-24 09:38 211 查看
由于项目需要,我最近对.NET平台下各ORM框架(LINQ to SQL、Entity Framework V2 & V4、以及NHibernate)进行了功能对比,NHiberante可以说是各框架之中历史最为悠久,功能最强,也是使用最为复杂的一个。在使用NHibernate的过程中也遇到了许多麻烦,不过也得到了不少体会。例如NH的不足之处,我理想中的ORM框架是怎么样的,等等这些,以后有机会也可以慢慢和各位进行讨论。

  不过这篇文章谈论的其实只是一个小技巧,一个workaround,而且甚至于这个是由于我对NHibernate不够了解而造成的。因此,如果您有更好的做法也请不吝指出。这个问题也就是“如何实现NHibernate中一对一映射的延迟加载”。

  问题描述

  之前对于问题的描述,其实还有很多额外的要求没有讲清楚,而需要“workaround”的现状,也是这些要求共同形成的。经过尝试,如果放弃其中任何一个(如把主表ID的生成策略从identity改为native),则可能就会有更直接的做法了。这些条件是:

  一对一映射

  主键关联

  主表的ID为自增字段

  所有字段NOT NULL。

  主表和子表设置级联删除

  现在的问题,就是在这些条件下,如何实现“获取主表对象时,并不加载其对应的子表数据”,也就是所谓的“延迟加载”。当然,除了能够“延迟加载”以外,还必须可以插入,更新和删除——我也尝试过使用某些特殊的映射方式,可以实现延迟加载,但是却无法插入,这自然也无法满足要求。

  为了便于理解和实验,我在这里也将其“具体化”。首先是Model,User和UserDetail,它们是典型的一对一关系:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: