2013-06-11 4 views
3

У меня есть несколько объектов отчета: BaseReport, ChildReport1, ChildReport2 и ChildReport3. Отчет может реализовывать интерфейс IComplexParameterSupport. ChildReport1,2 и 3 все наследуются от BaseReport..NET Parallel.ForEach, возможно, запутывает сеанс контекста NHibernate

Моя логика такова

  1. Открыть NHibernate контекст, используя SessionFactory
  2. Я использую рекурсии для создания дерева из типов отчетов, для создания своего рода меню. Это из иерархии родителя/ребенка - несколько раз вызывает базу данных, проверяя каждый раз тип отчета и выполняя определенные действия, связанные с определениями отчета.
  3. После этого я проверяю, является ли объект отчета IComplexParameterSupport.

В некоторых случаях, когда я знаю, что отчет реализует IComplexParameterSupport, когда я выполняю кастинг, объект отчета остается нулевым. Это похоже на то, что контекст NHibernate был потерян.

 
    if(report as IComplexParameterisedSupport != null) 

    { 
     // logic here 
    } 

Это происходит только тогда, когда я уже использовать Parallel.ForEach, то есть на шаге 2. Я использую веб-приложения на .NET 4.0. У кого-нибудь есть аналогичные проблемы с параллелизмом и сеансами контекста NHibernate?

ответ

1

Означает ли это, что сеанс может быть доступен одновременно несколькими потоками? Если это так, это проблема, поскольку сеанс NHibernate не является потокобезопасным. См. NHibernate thread safety with session

Смежные вопросы