Linq To nHibernate метод не найден - PullRequest
0 голосов
/ 25 марта 2012

Код:

public IEnumerable<CalendarItem> GetCalendarItems(DateTime? startDate = new DateTime?(), DateTime? endDate = new DateTime?())
    {
        if (startDate.HasValue && endDate.HasValue)
        { 
            var items = session.Linq<CalendarItem>()
                .Where(x => x.EventDate >= startDate.Value && x.EventDate <= endDate)
                .ToList<CalendarItem>(); //Error Here

            return items; 
        }


        //var items = session.QueryOver().OrderBy(x => x.EventDate);
        return session.CreateCriteria<CalendarItem>().List<CalendarItem>().OrderByDescending(x => x.EventDate);

    }

Исключение

 Method not found: 'System.Collections.IDictionary NHibernate.ISessionFactory.GetAllClassMetadata()'.

Справочная проблема? Любая помощь будет оценена.



Редактировать Я попытался использовать ненулевое время даты, и это дало ту же ошибку. Что-то пытается позвонить:

System.Collections.IDictionary NHibernate.ISessionFactory.GetAllClassMetadata()

Когда я проверяю ISessionFactory через vs2010, в медаданных не отображается метод "GetAllClassMetadata ()".

Ответы [ 3 ]

1 голос
/ 25 марта 2012

Возможно, провайдер linq не понимает вызов getDate.Value.попробуйте

.Where(x => x.EventDate >= startDate && x.EventDate <= endDate)

ОБНОВЛЕНИЕ


Кстати, какую версию nhibernate вы используете?Насколько я помню, .Linq устарел, вместо него используйте .Query

0 голосов
/ 26 марта 2012

Провайдер NHibernate Linq иногда немного глючит. Попробуйте сохранить параметры метода в локальных переменных, прежде чем использовать их в запросе Linq.

public IEnumerable<CalendarItem> GetCalendarItems(DateTime? startDate = new DateTime?(), DateTime? endDate = new DateTime?())
{
    if (startDate.HasValue && endDate.HasValue)
    { 
      DateTime? start = startDate.Value;
      DateTime? end = endDate.Value;

      var items = session.Linq<CalendarItem>()
                         .Where(x => x.EventDate >= start && x.EventDate <= end)
                         .ToList<CalendarItem>();

      return items; 
    }
    ...
}
0 голосов
/ 25 марта 2012

Я закончил тем, что вырвал свои ссылки на свободный / nhibernate. Я использовал nuget, чтобы получить пакет свободно, но, возможно, с ним возникла проблема. Я скачал последние сборки для свободного владения nhibernate и удалил любую ссылку на эти сборки, которые смог найти. Кажется, это решило проблему.

Кстати ... я сейчас использую Query () вместо Linq ()

...