나는 다른 개체에서 오는 속성에 의해 데시벨에서 오브젝트를 필터링 할하지만 난 예외가 얻을 :(유창한) nhibernate에서 QueryOver로 선택을 제한하는 방법?
유형 'System.Collections.Generic.KeyNotFoundException'의 첫 번째 예외가가 mscorlib.dll에서 발생했습니다
형의 첫 번째 예외 'NHibernate.QueryException는'형태의 첫 번째 예외 'NHibernate.QueryException가'NHibernate.dll
프로그램 "[5116] Examples.FirstProject.vshost 발생 NHibernate.dll
발생. exe : Managed (v2.0.50727) '코드 -532459699 (0xe0434f4d)로 종료되었습니다.
이 작동 :
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();
}
}
그리고 이러한 내 개체
입니다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);
}
이 아니, 그것은 예외 정보를 출력
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입니다.
CurveGroup cgAlias = null;
var curves = session.QueryOver<Curve>()
.JoinAlias(e => e.Group,() => cgAlias)
.WhereRestrictionOn(() => cgAlias.Name).IsLike("%GroupName%").List();
작품,하지만 뒤얽힌 것 같다 : 당신이 CurveGroup에 가입하고 별칭을 사용하는 경우 – mrt181
@ mrt181 디자인 상으로는 QueryOver가 자체적으로 연결 경로를 탐색하지 않는 것으로 보입니다. 쿼리에서 명시 적으로 지정해야합니다. 연관 경로가 지정되지 않은 경우 "특성을 분석 할 수 없음"예외가 발생합니다. (JoinAlias와 JoinQueryOver에 대한 자세한 내용은 [here] (http://nhforge.org/blogs/nhibernate/archive/2009/12/17/queryover-in-nh-3-0.aspx#Associations)를 참조하십시오. '. –
고마워, 잘 알고있어. – mrt181