【发布时间】:2014-07-24 15:29:53
【问题描述】:
我想在多个线程上使用来自 nhibernate 的Isessions。
我读过here 如何实例化工厂,它应该是线程安全的。
我知道 ISession 不是线程安全的,但我打算每个线程只使用一个 ISession。
这样做不起作用:
[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 和内存数据库。我错过了什么?
如果这不起作用,我应该如何告诉不同的线程使用他们自己的会话?
编辑
我从第一个线程得到消息,第二个线程抛出异常,表未找到。
编辑 2
我认为问题在于数据库的创建。 当我使用新创建的会话创建新表时,我的另一个会话不知道另一个会话。但我会尝试使用其他数据库。
new SchemaExport(config).Execute(true,true,false,session.Connection,null);
【问题讨论】:
-
您的代码是合法的。应该和sqlite有关。尝试使用另一个数据库
标签: c# multithreading nhibernate fluent-nhibernate