Как перебрать всю таблицу с помощью NHibernate? - PullRequest
0 голосов
/ 29 марта 2011

Я ищу простой пример NHibernate, который покажет мне, как перебирать всю таблицу. Вот то, что у меня пока, но это не работает. Я получаю «System.InvalidOperationException: операция недопустима из-за текущего состояния объекта.». Что я делаю не так?

    public IEnumerable<EMPDATA> getEMPData()
    {
        using (ISession session = NHibernateHelper.OpenSession())
        {
            IEnumerable<EMPDATA> empData = session.CreateQuery("from EMPDATA").Enumerable<EMPDATA>();
            return empData;
        }
    }

    public static void Main(System.String[] args)
    {
        log.Debug("Entered main");
        Console.WriteLine("Entered main");
        try
        {
            IEMPDataRepository repository = new EMPDataRepository();
            IEnumerable<EMPDATA> iterList = repository.getEMPData();
            while( iterList.GetEnumerator().MoveNext())
            {
                EMPDATA emp = iterList.GetEnumerator().Current;
                log.Debug(emp.EMP_ID);
            }
        }
        catch (System.Exception ex)
        {
            log.Error("Exception occured reading emp data", ex);
        }

Вот мое отображение:

Ответы [ 3 ]

1 голос
/ 29 марта 2011

Вы запрашиваете результат Enumerable, который, вероятно, зависит от открытого сеанса.

Поскольку после удаления сеанса после возврата экземпляра Enumerable соединение с базой данных было закрыто.

РЕДАКТИРОВАТЬ: см. NotSupportedException в IQuery's Enumerable при использовании бессостояния

0 голосов
/ 30 марта 2011

Более длинный ответ:
1. Я согласен с Филлом - выглядит как работа для SP
2. Диего (очевидно) прав, но на вашем месте я бы использовал SetFirstResult () и SetMaxResult (), чтобы контролировать объем данных, загружаемых в память на каждой итерации (не забывайте сортировать что-либо, когда используя этот метод, конечно).

0 голосов
/ 30 марта 2011

Краткий ответ: используйте .List вместо .Enumerable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...