我有两个实体:
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:
从缓存中获取实际的Parentpublic 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列)属性?
答案 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);