我正在使用NHibernate来持久化域模型,服务层服务于ASP.NET MVC前端(“服务层”目前只是一个标准类库,但将来可能会转换为WCF). Web应用程序询问它想要的数据,并在域对象上指定它所需的集合,服务层接受请求,加载对象和所需的集合(使用延迟加载)并使用AutoMapper将对象传递回它的位置一个viewmodel友好的表示.
我想要做的是加载所需的集合,从会话中分离对象并将其传递到前端.但是,当AutoMapper尝试映射对象时会导致异常,因为它正在尝试访问尚未初始化且会话不再可用的集合.我可以保持连接对象,但在这种情况下,AutoMapper转换最终导致对象的所有属性无论如何都是延迟加载的,这不是一个选项,我们沿着WCF路线走.
我想要做的是改变这种行为,以便当它没有连接到会话时,集合返回null(或者更好但是空)而不是抛出异常.这是Entity Framework V1中的默认行为(虽然它确实没有进行自动延迟加载),我之前曾与之合作但我无法找到在NH中进行此操作的方法.
有任何想法吗?我在这里走错了路吗?
编辑 – 为了更清楚我正在尝试实现的目标,访问集合属性时我想要这样的行为:
连接到会话:正常延迟加载集合.
没有session:property为null(而不是抛出异常)
更新 – 在Billy McCafferty的this post之后,我已经设法使用IUserCollectionType实现了一个解决方案,该解决方案到目前为止似乎有效.我没有像他那样使用提供的PersistentGenericBag,而是必须创建在未连接到会话时更改行为的新类型.它并不完美,需要一些非常难看的映射,但至少我不需要触摸我的域对象或客户端映射来使其工作.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。