【发布时间】:2016-09-02 20:55:36
【问题描述】:
我有两个关联的业务对象 - A 和 B。 该关联是 (A->B) 多对一的,其中 B.Id 是 A 中的外键(因此 A 在 DB 中有 A.B_id)。
我正在使用 lazy=true 并解决了我的大部分问题, 但是在 A 的 ToString 中,我还想打印 A.B.Id,我应该不需要进一步访问数据库就可以拥有它。但是访问 A.B 会激活代理,并且由于这不是在打开会话的上下文中,因此会引发异常。
一个简单但丑陋的解决方案是拥有 A.B_id 属性。但这是我们一开始就试图避免的事情的一部分。 任何“有机”的方式来做到这一点? :) 谢谢!
更新:刚刚了解缓存和 Session.Get 与 Session.Load。之前我只 new 如果对象不存在(Session.Load),则一个抛出异常,而另一个返回一个空对象(Session.Get)。在阅读了关于缓存here 的内容后,很明显 Session.Load 返回了对象的代理,并且仅在访问 ID 以外的属性时才懒惰地获取它,这非常像我需要的关联! 现在我添加了单独的对象 id(将 B_Id 添加到 A,因此我可以将其作为 A.B_Id 访问,而不是使用 A.B.Id)
【问题讨论】:
-
正如我所说,仅用于日志打印等,在 A 的 ToString() 中。我不需要 B 的其他字段。只需要 ID。
标签: nhibernate associations lazy-loading