我正在寻找任何类型的文档,一个我可以学习的开源nhibernate winform应用程序,甚至更好的winform / nhibernate框架。 我在Nhibernate contrib和NhAddins中看到了一点,但这就是全部。 关于网络有很多,但很少有关于winform的信息。 那是为什么?
答案 0 :(得分:8)
This文章是如何实现我见过的桌面 Windows应用程序的最佳示例。它详细说明的设计模式和最佳实践应该适用于WinForms或WPF \ Silverlight应用程序。
答案 1 :(得分:7)
为什么winforms的例子很少,是imho,管理会话在智能客户端比在网络世界中要复杂得多。
在网络世界中,您在http会话启动时打开一个ISession,并在http会话结束时关闭ISession。
智能客户端中没有直接翻译http会话的概念;多个屏幕同时打开,一些最小化,其他屏幕一直打开和关闭,一些屏幕关闭而不保存更改......你明白了。
我认为有三个基本策略:
每次申请1个会话
我会远离这个。请记住,如果您的单例会话抛出异常(如陈旧的实体异常),则该会话现在无法使用。你的应用程序基本上都是doo doo。
每个屏幕的会话
这样会好一点,如果单个会话爆炸,你可以避免你的应用程序瘫痪。但是,某些屏幕可能会在同一个unit of work中合并在一起。他们需要共享相同的会话,否则您将issues尝试在屏幕之间共享您的实体,因为持久实体与加载它们的会话具有亲缘关系。
持续对话
我认为这是要走的路。您定义了一个包含工作单元范围的服务。每次调用此服务上的方法时,都会无形地交换正确的ISession。完成服务后,在其上调用另一种方法,会话将被处理掉。
服务实例可以在您的屏幕之间共享,因此它们共享会话。可以同时打开多个会话。所有这些都是通过面向方面编程技术完成的,您不需要采取任何其他操作来标记带有属性的服务。
这听起来相当复杂,因此结帐Fabio的帖子here,here和here。
unoffical nh addins中有这种模式的实现。这适用于Windsor,可能会将其转换为其他IoC容器。
答案 2 :(得分:3)
Fabio Maulo在WinForms应用程序中有一个很好的post会话管理,底部还有一个示例应用程序下载链接。
答案 3 :(得分:1)
有一项工作正在讨论混合由Sebastian Talamoni撰写的nHibernate + Windows表单available here。它包括讨论+代码。
答案 4 :(得分:0)
我发现这个更新近了。它有代码生成并使用spring.net http://www.codeproject.com/KB/cs/NHibernateForWinforms.aspx