NHibernate 将会话传递到存储库

Posted

技术标签:

【中文标题】NHibernate 将会话传递到存储库【英文标题】:NHibernate Passing Session to the Repository 【发布时间】:2009-06-24 14:56:20 【问题描述】:

如何将会话传递给存储库类?

假设我有两个项目。

1) 测试套件 2) 业务对象

存储库包含在 BusinessObjects 项目中。 NHibernate 会话在 TestSuite 项目中打开。现在,我想使用同一个会话,因为 TestSuite 项目在该会话上启动了一个事务。目前,我正在使用以下内容:

var repository = new CustomerRepository(_session);

当然,这看起来很难看!我在想以某种方式可以挂钩依赖注入框架并为我提供 ISession 对象,而无需传递到存储库中。

【问题讨论】:

【参考方案1】:

在我们的 WCF 服务中,我们实际上使用了 UnitOfWork,它包装了单个操作并存储了该操作的 ISession。

存储库知道如何从它们正在运行的当前工作单元中获取 ISession。

在测试方面,我们有一个基础测试类,任何包含与数据库相关的测试的测试类都从该类继承。然后我们在 testfixturesetup 中控制一个工作单元的开始和结束。一旦您习惯了在 NUnit 版本中我们使用的拆解不能保证运行(以防在设置或测试期间出现未处理的异常)这一事实,对我们来说工作得相当好。

【讨论】:

你在什么环境下运行?表格? WCF? ASP.Net?

以上是关于NHibernate 将会话传递到存储库的主要内容,如果未能解决你的问题,请参考以下文章

如何在多个实体到另一个实体之间创建 NHibernate 关系映射(即继承映射)

将 NHibernate 开放会话合并到 DB(耦合 NHibernate 和 DB 会话)

将原生 SQL where 子句应用于实体的 Nhibernate 查询

NHibernate SessionFactory 线程安全问题

NHibernate 效率

NHibernate体系结构