nhibernate winform应用程序的示例

13 nhibernate winforms

我正在寻找任何类型的文档,一个我可以学习的开源nhibernate winform应用程序,甚至更好的winform/nhibernate框架.我在Nhibernate contrib和NhAddins中看到了一点,但这就是全部.关于网络有很多,但很少有关于winform的信息.这是为什么 ?

Dav*_*nch 8

Oren Eini的这篇文章是如何实现我见过的桌面 Windows应用程序的最好例子.它详细说明的设计模式和最佳实践应该适用于WinForms或WPF\Silverlight应用程序.


Noe*_*edy 7

为什么winforms的例子很少,就是imho,管理会话在智能客户端比在网络世界中要复杂得多.

在Web世界中,您在http会话启动时打开ISession,并在http会话结束时关闭ISession.

在智能客户端中没有直接翻译http会话的概念; 多个屏幕同时打开,一些最小化,其他屏幕一直打开和关闭,一些屏幕关闭而不保存更改......你明白了.

我认为有三个基本策略:

每个申请1个会话

我会远离这个.请记住,如果您的单例会话抛出异常(如陈旧的实体异常),则该会话现在无法使用.你的应用基本上是在doo doo.

每个屏幕的会话

这样会好一点,如果单个会话爆炸,你可以避免你的应用程序瘫痪.但是,某些屏幕可能会在同一工作单元中合并在一起.他们需要共享同一个会话,否则您将在尝试在屏幕之间共享实体时遇到问题,因为持久性实体与加载它们的会话具有亲缘关系.

持续对话

我认为这是要走的路.您定义了一个包含工作单元范围的服务.每次调用此服务上的方法时,都会无形地交换正确的ISession.完成服务后,在其上调用另一种方法,会话将被处理掉.

可以在屏幕之间共享服务实例,从而共享会话.可以同时打开多个会话.所有这些都是通过面向方面编程技术完成的,您不需要采取任何其他操作来使用属性标记您的服务.

这听起来相当复杂,所以在这里,这里这里结帐Fabio的帖子.

非官方的nh插件中实现了这种模式.这适用于Windsor,可能会将其转换为其他IoC容器.


Ree*_*sey 1

有一项正在讨论混合 nHibernate + Windows 表单的工作正在进行中,由 Sebasian Talamoni 编写,可在此处找到。它包括讨论+代码。