访问父实体的ID,而不是先在EntityFramework代码中实际加载它

时间:2013-09-17 16:44:45

标签: c# entity-framework

我有两个实体:

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查询包含或不包含父项的Child实体。

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

但在某些情况下,我已将所有Parent实体缓存在内存中,并且我想跳过加入和查询只有Id propery加载的Child实体。然后通过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.Parent == null。

有没有办法让child.Parent被加载或只是访问child.Parent.Id(ParentId列)属性?

1 个答案:

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