2014-07-24 43 views
1

我想在多个线程中使用来自nhibernate的Isessions。 我读here如何instanciate工厂,它应该是线程安全。 我知道ISession不是线程安全的,但我打算每个线程只使用一个ISession。在多个线程中使用nhibernate sessionfactories

这样做行不通:

[Test] 
public void TestMultipleThreads(){ 
    object id; 
    using(var session = NHibernateHelper.OpenSession()){ 
    id = session.Save(new SomeThing("SomeText")); 
    }; 
    Parallel.For(0,2,() =>{ 
    using (var session =NHibernateHelper.OpenSession()){ 
     using (var tx=session.BeginTransaction()){ 
     var something = session.Load<SomeThing>(id); 
     Console.WriteLine(something.Text); 
     }; 
    }; 
    }); 
} 

我不能让那个测试运行,这样它会打印出2名。我正在使用SQLite和内存数据库。我错过了什么?

如果这不起作用,我该如何告诉不同的线程使用他们自己的会话?

编辑

我从第一线的消息,第二投用表异常未找到。

EDIT 2

我觉得Prolem在于创建数据库。 当我使用新创建的会话创建新表时,我的其他会话不知道其他会话。但我会尝试使用其他数据库。

new SchemaExport(config).Execute(true,true,false,session.Connection,null); 
+0

你的代码是合法的。它应该与sqlite有关。尝试与另一个数据库 –

回答

1

这很可能是因为你使用SQLite内存数据库, 它通常停止,当你关闭连接存在,

在这个例子中

,好像你的数据库被破坏,当你处理第一次会议,以及你坚持的数据。

相关问题