asp.net-mvc – 在ASP.NET MVC中的NHibernate会话管理
发布时间:2020-12-15 19:10:17 所属栏目:asp.Net 来源:网络整理
导读:我目前正在玩的HybridSessionBuilder类发现在Jeffrey Palermo的博客文章: http://jeffreypalermo.com/blog/use-this-nhibernate-wrapper-to-keep-your-repository-classes-simple/ 使用这个类,我的存储库看起来像这样: public class UserRepository : IUs
我目前正在玩的HybridSessionBuilder类发现在Jeffrey Palermo的博客文章:
http://jeffreypalermo.com/blog/use-this-nhibernate-wrapper-to-keep-your-repository-classes-simple/ 使用这个类,我的存储库看起来像这样: public class UserRepository : IUserRepository { private readonly ISessionBuilder _sessionBuilder; public UserRepository(ISessionBuilder sessionBuilder) { _sessionBuilder = sessionBuilder; } public User GetByID(string userID) { using (ISession session = _sessionBuilder.GetSession()) { return session.Get<User>(userID); } } } 这是管理NHibernate会话/工厂的最好方法吗?我听说过关于工作单元的事情,并为每个Web请求创建一个会话,并在最后刷新它。从我可以告诉,我目前的实现不是做任何这些。它基本上依赖于Repository从会话工厂获取会话,并使用它来运行查询。 这样做数据库访问有任何陷阱吗? 解决方法
你不应该将你的ISession包装在using语句中 – 将ISessionBuilder传递给库构造函数(依赖注入)的意义是调用代码负责控制ISession的生命周期。通过将它包装在一个使用中,Dispose()在ISession上被调用,你将不能延迟加载对象成员或持久化它。
我们通过将一个ISession传递给存储库构造函数来做类似的事情。巴勒莫的代码,我理解它,只是增加了惰性初始化的ISession。我不认为这是必要的,因为如果你不打算使用它,为什么你会新建一个存储库? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – ASP.Net MVC中的分页和路由
- asp.net – .NET中的大型Gen 0堆,浪费内存?
- asp.net-mvc – 哪里可以将商业模式转换成模型?
- 如何将焦点放在ASP.NET MVC页面上的JQuery Dialog按钮之一?
- 如何为ASP.NET应用程序全局设置autocomplete = off?
- asp.net-mvc-3 – MVC:路由获取/发布到不同的控制器 怎么样
- asp.net core 从单机到集群
- ASP.NET Core知多少(6):VS Code联调Angular + .NetCore
- ASP.NET会话已过期或无法找到 – >因为Session.SessionID发
- 有条件地排除ASP.NET WebForms中的一个HTML块