如何仅加载关联实体的 ID
本文关键字:ID 实体 关联 何仅 加载 | 更新日期: 2023-09-27 18:33:25
我有 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));
但是这样做会完全加载子实体,我只想像这样加载 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来配置映射。
您可以使用投影或映射到另一个只会返回上述要求的实体。
即
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