3

我有两个实体:

public class Parent
{
    public Guid Id { get; set; }

    public string Name { get; set; }
}

public class Child
{
    public Guid Id { get; set; }

    public string Name { get; set; }

    public Parent Parent { get; set; }
}

我可以使用 Include 查询有或没有父实体的子实体。

public void Test()
{
    var child = context.Set<Child>().Include(x => x.Parent)
                       .FirstOrDefault(x => x.Id == Guid.Parse("<some_id>"));
}

但是在某些情况下,我已经将所有父实体缓存在内存中,并且我想跳过连接并查询仅加载了 Id 属性的子实体。然后通过 Id 从缓存中获取实际的 Parent:

public void Test()
{
    var cachedParents = new List<Parent>();

    var child = context.Set<Child>()
                       .FirstOrDefault(x => x.Id == Guid.Parse("<some_id>"));
    var parent = cachedParents.FirstOrDefault(x => x.Id == child.Parent.Id);
}

但是 child 加载了 child.Parent == null。

有什么方法可以加载 child.Parent 或仅访问 child.Parent.Id (ParentId 列)属性?

4

1 回答 1

1

您可以使用Select从数据库中获取单个属性(或任何属性选择):

Guid childId = Guid.Parse("<some_id>");
var parentId = context.Set<Child>()
                      .Where(x => x.Id == childId)
                      .Select(x => x.Parent.Id)
                      .FirstOrDefault();

var parent = cachedParents.FirstOrDefault(x => x.Id == parentId);
于 2013-09-17T16:58:18.493 回答