日期:2014-05-16 浏览次数:20418 次
最近想使用Nhibernate作为数据持久层应用到wpf项目中,但是所有的都配置好了,单元测试了,保存没有问题!但是一查看数据库中,却发现数据并未有插入的数据。这是怎么回事呢?在网上查了有以下几种说法:
1、没有提交事务。这个我尝试了,没有成功!
2、没有使用Session.Flush()。这个我也尝试,还是没有成功!
3、没有使用Session.Close()。这个我也尝试,还是没有成功!
最后,无奈没有办法了。在网上也没有找到一个能说出所以然的答案来的。所以,最后将获得ISession的方法从SessionFactory.OpenSession()改为SessionFactory.GetCurrentSession()。单元测试提示空指针了,网上说查到说要设置一个current_session_context_class的属性,值我设的是NHibernate.Context.ThreadStaticSessionContext,最后还是没有成功!哎!无语了,真是纠结啊,到现在这个问题还是么有解决!
研究了一个晚上,终于把数据保存不到数据库中的这个问题解决了。具体的做法是在App.cs文件中的Startup事件和Exit事件中加上如下代码:
以下代码用于Startup事件中:
/// <summary>
/// 定义应用程序启动时要处理的内容
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Application_Startup(object sender, StartupEventArgs e)
{
//通过配置获得SessionFactory
initializeNHibernateForAppWPF();
ISession session = SessionFactory.OpenSession();
session.BeginTransaction();
CurrentSessionContext.Bind(session);
}
#region NHibernate
public static ISessionFactory SessionFactory;
private static void initializeNHibernateForAppWPF()
{
Configuration cfg = new Configuration().Configure();
cfg.AddAssembly(typeof (AbstractSession).Assembly);
cfg.AddProperties(new Dictionary<string, string>
{
{"current_session_context_class","NHibernate.Context.ThreadStaticSessionContext"}
});
try
{
SessionFactory = cfg.BuildSessionFactory();
}
catch (Exception ex)
{
throw new Exception(ex.Message,ex