2012-03-24 1 views
0

Код:Linq To NHibernate метод не найден

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()'. 

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



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

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

Когда я проверяю ISessionFactory через VS2010 medadata не показывает «GetAllClassMetadata()» метод.

+0

Привет, видеть мой обновленный ответ, если это помогает – Davita

ответ

0

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

BTW ... Я теперь с помощью Query(), а не Linq()

1

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

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

UPDATE


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

+0

спасибо, я попытался изменить к Ненулевым DateTime и получить ту же ошибку. – AGoodDisplayName

0

провайдер 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; 
    } 
    ... 
}