NHibernate在C#应用程序中,如何管理会话

时间:2011-04-01 22:49:56

标签: c# winforms nhibernate

我是NHibernate世界的新手,我开始构建一个简单的C#Windows窗体应用程序,它将一些XLS文件导入数据库(SQL2008),详细说明数据,然后导出CSV文件。 我试图搜索一些如何使用和管理NHibernate会话的例子;其中一些对Web应用程序很有用。我已经看到在MVC应用程序中,NHibernate会话是在Application Start上创建的,但我无法理解何时必须在Windows窗体应用程序中创建NHibernate会话。

任何人都可以帮助我吗? 谢谢!

3 个答案:

答案 0 :(得分:2)

根据反馈,我建议您查看using SSIS这项工作。除了为这些ETL过程设计之外,SSIS还可以根据需要重新执行,根本不需要自定义代码。虽然如果你愿意,但是根据需要编写.NET代码运行SSIS软件包并不难。这是an example。请注意,SSIS API仍然经常带有DTS前缀。 DTS(数据转换服务)是SSIS(SQL Server集成服务)的前身,大部分技术都可以重复使用。

答案 1 :(得分:2)

首先,我认为您没有使用正确的工具来完成这项工作。 但如果仍然想将NH用于学习目的,这些是我的建议:

我强烈推荐这个讲座: http://msdn.microsoft.com/en-us/magazine/ee819139.aspx

Ayende谈论了非网络场景中会话处理的大部分问题。 我们过去做的是遵循类似模式的模型 - 每个表单。模型包含会话,但模型生命周期与表单的生命周期相关联。这可以防止每个应用程序有一个会话这是一个非常糟糕的决定,事实上Fabio Maulo(NH Lead)说你的应用程序中有一个定时炸弹。

新货这不是唯一的方法。 Fabio Maulo和一位名叫Gustavo Ringel的聪明人提出了这个问题:

http://fabiomaulo.blogspot.com/2009/01/aspect-conversation-per.html

http://gustavoringel.blogspot.com/2009/02/unhaddins-persistence-conversation-part.html

好消息不是所有理论,unNHAddins都有这个概念的完整功能实例。

HTH

答案 2 :(得分:0)

首先,我不建议NHibernate用于这种情况 - 导入/导出和多个数据存储并不是真的。

那就是说...... Web应用程序通常会在每页请求中创建NHibernate会话(例如,在Session Start事件中,或者作为动作过滤器)。会话工厂通常在Application Start中创建。

对于Windows窗体应用程序,您可能需要查看“unit of work”模式。你的会议可能想要遵循这个。