0

私は 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 を使用してマッピングを構成します。

4

1 に答える 1

0

プロジェクションを使用するか、上記の要件のみを返す別のエンティティにマップすることができます。

すなわち

ParentEntity {..., IList<ChildEntity> Children}
ChildEntity {...}
ParentEntityLite {...} //mapped w.r.t requirements i.e. no mappings for children 

または投影を介して

from parent in _session.Query<ParentEntity>()
select new {parent.Id, ...}; //projection --> parent.Id

from parent in _session.Query<ParentEntity>()
select new ParentEntity(){Id = parent.Id}; // projection --> parent.Id
于 2012-05-08T08:43:06.500 に答える