別のオブジェクトに由来するプロパティでデータベースのオブジェクトをフィルタリングしたいのですが、例外が発生します。
タイプ'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に不慣れです。