1
我希望由来自另一个对象的属性过滤从DB对象,但我得到一个异常:如何限制在(流利)nhibernate中的QueryOver的选择?
型“System.Collections.Generic.KeyNotFoundException”的第一次机会异常出现在mscorlib.dll
类型的第一次机会异常“NHibernate.QueryException”发生在NHibernate.dll
类型的第一次机会异常“NHibernate.QueryException”发生在NHibernate.dll
程序“[5116] Examples.FirstProject.vshost。 exe:Managed(v2.0.50727)'退出代码-532459699(0xe0434f4d)。
这工作:
var curves = session.QueryOver<Curve>().WhereRestrictionOn(p => p.Name).IsLike("%CurveName%").List();
foreach (Curve curve in curves)
{
Console.WriteLine(" ID:\t{0}\n Name:\t{1}\n Group:\t{2}\n", curve.Id, curve.Name, curve.Group.Name);
}
这不,它输出异常信息:
var curves = session.QueryOver<Curve>().WhereRestrictionOn(p => p.Group.Name).IsLike("%GroupName%").List();
foreach (Curve curve in curves)
{
Console.WriteLine(" ID:\t{0}\n Name:\t{1}\n Group:\t{2}\n", curve.Id, curve.Name, curve.Group.Name);
}
这是我的映射:
public class CurveMap : ClassMap<Curve>
{
public CurveMap()
{
Table("CURVES");
Id(x => x.Id).Column("CURVE_ID");
Map(x => x.Name).Column("NAME");
References(x => x.Group).Column("GROUP_ID");
}
}
public class CurveGroupMap : ClassMap<CurveGroup>
{
public CurveGroupMap()
{
Table("GROUPS");
Id(x => x.Id).Column("GROUP_ID");
Map(x => x.Name).Column("NAME");
HasMany(x => x.Curves).KeyColumn("GROUP_ID").Cascade.All().Inverse();
}
}
这些都是我的对象
public class Curve
{
public virtual int Id { get; private set; }
public virtual string Name { get; set; }
public virtual CurveGroup Group { get; set; }
}
public class CurveGroup
{
public virtual int Id { get; private set; }
public virtual string Name { get; set; }
public virtual IList<Curve> Curves { get; set; }
}
任何想法,如何解决这个问题。我很新(流利)nhibernate。
工作,但似乎令人费解。有没有更简单的方法来实现这个目标,或者为什么要这样做。你能否详细说明你的答案并提供更多细节。 – mrt181 2011-04-11 09:50:56
@ mrt181似乎按照设计,QueryOver不会自行导航关联路径。您必须在查询中明确指定。如果没有指定关联路径,则抛出异常“无法解析属性”。 (参见[这里](http://nhforge.org/blogs/nhibernate/archive/2009/12/17/queryover-in-nh-3-0.aspx#Associations)了解更多'JoinAlias'和'JoinQueryOver的细节'。 – 2011-04-11 10:04:47
谢谢,很高兴知道 – mrt181 2011-04-11 10:47:45