NHibernate + темы - PullRequest
       1

NHibernate + темы

0 голосов
/ 21 сентября 2011

У меня есть почти такой код:

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(...);
}

После выполнения в выводе консоли остается только часть списка. Я думаю, что Method не может получить доступ к элементам списка. При отладке вместо значения переменной появляется следующее сообщение: «Оценка функции отключена, потому что истекло время предыдущей оценки функции. Вы должны продолжить выполнение, чтобы включить функцию оценки». Или исключение LazyInitialization "Не удалось инициализировать прокси - нет сеанса". Проблема в сеансе NHibernate или что-то еще? И как я могу это решить? Метод находится в отдельном потоке, потому что он занимает слишком много времени, и результат создания должен быть возвращен как можно быстрее.

1 Ответ

1 голос
/ 21 сентября 2011

Вы получаете исключение LazyInitialization, поскольку метод пытается получить доступ к свойству, которое не инициализировано. По умолчанию ассоциации NH загружаются лениво, поэтому при доступе к свойству NH пытается загрузить данные из сеанса, которые, конечно, к тому времени давно ушли и утилизированы.

Несколько вариантов:

  1. Стремитесь загрузить ассоциации в вашем отображении с помощью 'lazy = false'
  2. Стремитесь загрузить ассоциации в вашем запросе с помощью 'FetchMode = join'
  3. Вручную сделайте загрузку. После того, как вы получите свои объекты, получите доступ к свойствам, чтобы убедиться, что они загружены (или используйте NHibernateUtil.Initialize () для ассоциаций).
  4. Сделай что-нибудь подобное http://trentacular.com/2009/08/how-to-use-nhibernate-lazy-initializing-proxies-with-web-services-or-wcf/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...