如何仅加载关联实体的 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来配置映射。

如何仅加载关联实体的 ID

您可以使用投影或映射到另一个只会返回上述要求的实体。

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