如何配置NHibernate设施?

时间:2012-09-06 15:51:03

标签: nhibernate transactions fluent-nhibernate castle-windsor castle

我对NHibernate有一些经验,我正在尝试使用Castle Nhibernate Facilities或Castle NhibernateIntegration。我想知道,在哪里可以找到如何在服务层(业务,类库项目)中配置和执行事务控制(带属性)的演示项目?没有文档,我很难找到一些内容来开始。

我在网上发现了一些样本,但只有代码而不是示范项目...我想下载一些东西来学习。我找不到完整的解决方案,只是业务类(类库)中的配置和事务控制。

对不起这种线程,但我确实知道如何开始。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您想查看Castle Windsor与nHibernate集成的完整示例,那么我会查看Sharp Architecture

夏普是尝试“最佳实践”模板项目,并使用了许多技术(包括Castle和nHibernate)。虽然它所做的一些事情可能不符合您的口味,但它会清楚地向您展示它可以融合在一起的方式之一。

你可能需要在GitHub上寻找源存储库,如果你想看看在低级别发生了什么,因为夏普在预编译的模板项目中使用它自己的基类(它仍然是开源的)所以如果你愿意,你可以看到发生了什么。)

当我将我的建筑结合在一起时,这对我来说是一个非常宝贵的帮助,我可以诚实地说Castle和nHibernate是要走的路,所以你们正走在正确的轨道上。

编辑评论1:也许我在这里有点困惑。根据城堡的说明

  

设施是扩展容器的主要方式。使用设施   您可以将容器与外部框架集成,如WCF或   NHibernate,为容器添加新功能,如事件布线,   事务支持...或组件(同步,可启动   语义...)。

据我所知,Castle Nhibernate Facilities和Castle NhibernateIntegration都是设施,必须以容器为基础。

如果你想在没有容器的情况下工作,那么你需要使用某种形式的Singleton Factory来管理SessionFactory。有一个例子here

在控制交易的属性方面,这就是夏普的做法(见here)。您可以放弃重用此代码并将NHibernateSession替换为您自己的Singleton,例如theirs

您不需要实现UnitOfWork,因为nHibernate正在为您有效地执行此操作。您真正需要的是一种体系结构,它允许您在单一控制点(Singleton)管理事务,并且可在每个存储库中使用。