nhibernate 3不支持指定的方法

时间:2010-12-29 13:01:33

标签: c# nhibernate

我最近从nhibernate 2迁移到3,我遇到的问题是,在我现在遇到问题之前的大部分查询中。 我看到这个错误不支持指定的方法 虽然它们在hibernate 2中运行良好。这些查询中的一个就像这样

 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;
    }

}

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

我只是遇到类似的问题,因为属性被映射为“多对一”,属性为lazy =“no-proxy”。我删除了它,它的工作原理。问题可能是因为此属性用于查询的 where 部分。像:

 EntityType aliasEntityType = null;
 PropertyType aliasPropertyType = null; 

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

因此,PropertyType类型的属性不应该具有lazy =“no-proxy”。我试图隐式获取Property,但它不起作用。

答案 2 :(得分:0)

在最后几行......

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

如果p.Title为null,那么你将得到“不支持特定方法”。你可以试着写

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

或使用C#6

AddExpression(p => p.Title?.Contains(search));
相关问题