我差不多有这样的代码:
public class WCFService
{
public OperationResult Create(...)
{
List<SomeClass> classList = new List<SomeClass>();//Items are got from db using NHibernate
...
Thread t = new Thread(delegate () {
foreach ( item in classList)
{
Method(item);
}
}
...
return new OperationResult();
}
public void Method ( List<SomeClass> list) //doesn't use NHibernate Session
{
Conslole.Writeline(list.ToString());
}
}
void main()
{
WCFService service = new WCFService();
service.Create(...);
}
在控制台输出中执行后,只有List的一部分。我认为Method无法访问列表元素。在调试时,有这样的消息而不是变量值:“功能评估被禁用,因为先前的功能评估超时。您必须继续执行以重新启用功能评估”。或LazyInitialization异常“无法初始化代理 - 无会话”。是NHibernate会话中的问题还是其他什么?我该如何解决? 方法在单独的线程中,因为它需要花费太多时间,并且创建结果需要尽快返回。
答案 0 :(得分:1)
您获得了LazyInitialization异常,因为该方法正在尝试访问未初始化的属性。默认情况下,NH关联是延迟加载的,因此在访问属性时,NH会尝试从会话中加载数据,当然这段时间早已消失并被处理掉。
一些选择: