我有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配置映射。
答案 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