我最近从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;
}
}
答案 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));