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);
你的代码是合法的。它应该与sqlite有关。尝试与另一个数据库 –