2010-12-29 3 views
3

Недавно я перешел из nhibernate с 2 по 3, проблема у меня есть, в большинстве запросов, которые у меня были до того, как у меня возникла проблема прямо сейчас. и я вижу эту ошибку Указанный метод не поддерживается , хотя все они хорошо работают в спящем режиме 2. один на них запрос, как этоУказанный метод не поддерживается nhibernate 3

public JsonResult AllEducationDegree(string search) 
    { 
     var data = Repository<EducationDegree> 
      .FindBySpecification(new EducationDegreeSpecification().Search(search)) 
      .Take(10) 
      .Select(p => new NameValue(p.Title, (int)p.Id)) 
      .ToList(); 
     // .AsDropdown(" "); 
     return Json(data, JsonRequestBehavior.AllowGet); 
    } 

public class EducationDegreeSpecification : FluentSpecification<EducationDegree> 
{ 
    public EducationDegreeSpecification Search(string EducationDegreeSearch) 
    { 
     if (!String.IsNullOrEmpty(EducationDegreeSearch)) 
     { 
      string[] searchs = EducationDegreeSearch.Split(' '); 
      foreach (string search in searchs) 
      { 
       if (!String.IsNullOrEmpty(search)) 
       { 
        AddExpression(p => p.Title.Contains(search)); 
       } 
      } 
     } 
     return this; 
    } 

} 
+1

Какой метод не поддерживается? – Paco

+2

@Paco - Я полагаю, что это вопрос – JohannesH

+0

@Adrakadabra - У меня такая же проблема. Я выделил его для использования «.Where (x => ...), но я понятия не имею, что делать вместо этого. – JohannesH

ответ

0

Я просто похожая проблема, и это произошло потому, что имущество, которое отображается как «многие-к-одному» имеют атрибут ленивым = «без прокси». Я удалил это, и он работает. Проблема, вероятно, в том, что это свойство было использовано в , где часть запроса. Как:

EntityType aliasEntityType = null; 
PropertyType aliasPropertyType = null; 

QueryOver.Of<EntityType>(() => aliasEntityType) 
.JoinAlias(() => aliasEntityType.Property,() => aliasPropertyType) 
.Where(() => aliasPropertyType.SomeValue == someValue) 
.... 

Таким образом, свойство типа PropertyType должны не ленивым = «нет прокси». Я попытался неявно извлечь свойство, но он не работает.

3

Вам нужно выбрать до Take. Он должен работать.

var data = Repository<EducationDegree> 
     .FindBySpecification(new EducationDegreeSpecification().Search(search)) 
     .Select(p => new NameValue(p.Title, (int)p.Id)) 
     .Take(10) 
     .ToList(); 
    // .AsDropdown(" "); 
    return Json(data, JsonRequestBehavior.AllowGet); 
0

В последние несколько строк ...

AddExpression(p => p.Title.Contains(search)); 

если p.Title имеет нулевое значение, то вы получите "конкретный метод не поддерживается." Вы можете попробовать написать

AddExpression(p => p.Title != null && p.Title.Contains(search)); 

или с помощью C# 6

AddExpression(p => p.Title?.Contains(search)); 
Смежные вопросы