如何仅加载关联实体的ID

时间:2012-05-08 08:20:30

标签: c# nhibernate fluent-nhibernate-mapping

我有N层体系结构,在服务层我需要一种方法来只获取关联实体或完整实体的ID。所以在一个会话中我只需要id,而在其他会话中我可能需要完整的实体。

我有两个实体:

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配置映射。

1 个答案:

答案 0 :(得分: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