私は N 層アーキテクチャを使用しており、サービス層では、関連付けられたエンティティまたは完全なエンティティの ID のみを取得する方法が必要です。したがって、あるセッションでは ID のみが必要であり、別のセッションでは完全なエンティティが必要になる場合があります。
私は2つのエンティティを持っています:
public class ParentEntity
{
public virtual long Id { get; set; }
public virtual IList<ChildEntity> Children { get; set; }
public virtual string Name { get; set; }
// ... other fields
}
public class ChildEntity
{
public virtual long Id { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
// ... other fields
}
完全な ChildEntity を (検証レイヤーで) ロードする必要がある場合もありますが、サービス レイヤーで次のように ID をロードするだけでよい場合もあります。
ParentEntity parent = repository.GetById(someId);
SendChildIds(parent.Children.Select(x => x.Id));
しかし、これを行うと ChildEntity が完全に読み込まれます。このような ID のみを読み込みたい
SELECT parentchild0_.ParentId as ParentId0_,
parentchild0_.ChildId as ChildId0_
FROM ParentChildEntities parentchild0_
WHERE parentchild0_.ParentId0_= 447 /* @p0 */
しかし、彼はこのようなことをします
SELECT pce.ParentId, ce.* FROM ChildEntities ce INNER JOIN ParentChildEntities pce on pce.ChildId = ce.Id WHERE pce.ParentId = 447
FluentNHibernate を使用してマッピングを構成します。