VB   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了vb.net – 将NHibernate与存储库模型结合使用的最佳方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_675_0@ 我有一个存储库类,它定义了一些基本的Get / Save / delete方法.在这些内部,我使用NHibernate来完成我的业务实体的工作.例如:
Public Class SecurityRepositoryNHibImpl : Implements ISecurityRepository
    Public Function GetUser(ByVal UUID As System.Guid) As EntitieS.User Implements ISecurityRepository.GetUser
        Dim eUser As EntitieS.User
        Using session As ISession = NHibernateHelper.openSession()
            eUser = session.Get(Of EntitieS.User)(UUID)
        End Using
        Return eUser
    End Function
End Class

但是,在我的User类中,我有一些属性和其他对象的集合,理想情况下我想要延迟加载.但是当然,ISession是在存储库中创建和处理的,我想这就是为什么,除此之外,当我尝试访问这些属性时,我得到一个“无法初始化代理 – 没有会话”错误.

我唯一的选择是在使用存储库时禁用延迟加载吗?或者是否可能(或者只是愚蠢)以某种方式将会话纳入业务层的范围?

我确实喜欢这个存储库模型,并且NHibernate在我身上不断增长(在经历了许多最初的挫折之后试图让它工作),那么大师们一起使用它们的最佳方式是什么?

我对NHibernate和存储库模型一般都很陌生(在工作中我们仍主要使用VB6!),所以原谅可能是一个愚蠢的问题.谢谢.

@mookid:谢谢老兄,这真的很有帮助,但我可能会把它打开一段时间.它是WCF Web服务的后端,所有功能都是每个呼叫的上下文,因此每个呼叫的会话寿命都会很好.只是不确定如何在业务层中使用这样的东西,理想情况下我不希望业务对象必须直接与任何NHibernate类接口.我想NHibernate会话的某种包装器至少会将它抽象出来……
嗯,你至少让我走上了正确的轨道.

看起来这里的关键词是“工作单元”,网上存在大量与NHibernate相关的资源.特别是在Rhino Commons中寻找Ayende’s implementation,以及他的应用程序架构网络演员(no. 9 at Hibernating Rhinos),非常有用.我最初感到困惑,因为我然在业务层中设置了“工作单元”,但却是混合问题,but I was soon corrected.

创建您的ISession并将其显​​式地放置在您的存储库中,这对于小型和非常简单的项目是可以的 – 但是,正如您已经发现的那样,当您开始想要使用NHibernate支持的一些很酷的功能时,它很短.

您应该让会话的生活方式由您的存储库之外的东西控制 – 例如如果您正在使用ASP.NET Web应用程序,您可能希望在Web请求的持续时间内将会话保存在当前请求中(如果我没记错的话,将httpContext.Current.Items保存),然后在结束时提交并处置请求(如果发生异常,则回滚).

我不知道在ASP.NET应用程序中控制会话生活方式的最佳方法,但必须有一些方法可以在每个请求的开头和结尾调用代码.在ASP.NET MVC中,可以通过从覆盖其OnActionExecuTing和OnActionExecuted方法的基本控制器派生所有控制器来轻松完成.

大佬总结

以上是大佬教程为你收集整理的vb.net – 将NHibernate与存储库模型结合使用的最佳方法全部内容,希望文章能够帮你解决vb.net – 将NHibernate与存储库模型结合使用的最佳方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。