私は2つのクラスを持っています:
public class Reference
{
public virtual string Id { get; set; }
// ...
public virtual Stamp Stamp { get; set; }
}
public class Stamp
{
public DateTime? Created { get; set; }
public User CreatedBy { get; set; }
public DateTime? LastUpdated { get; set; }
public User LastUpdatedBy { get; set; }
}
Reference.Stamp は、次の流暢な nhibernate マッピングを使用して、コンポーネントとしてマップされます (「スタンプ」フィールドが参照テーブルに表示されるように)。
public class ReferenceMap : ClassMap<Reference>
{
public ReferenceMap()
{
Id(e => e.Id);
// ...
Component(e => e.Stamp);
}
}
public class StampMap : ComponentMap<Stamp>
{
public StampMap()
{
Map(e => e.Created);
References(e => e.CreatedBy);
Map(e => e.LastUpdated);
References(e => e.LastUpdatedBy);
}
}
「参照」アイテムをリストするときに N+1 を回避するために、「CreatedBy」フィールドと「LastUpdatedBy」フィールドで熱心なフェッチを実行したいと考えています。
私はこれを試しました:
Reference[] references = session
.Query<Reference>()
.Fetch(r => r.Stamp.CreatedBy)
.Fetch(r => r.Stamp.LastUpdatedBy)
.ToArray();
このエラーの原因:
System.ArgumentException: フェッチ要求は、種類 o => o.Related の単純なメンバー アクセス式である必要があります。「r.Stamp.CreatedBy」は複雑すぎます。
フェッチを機能させる方法についてのアイデアはありますか?