实体框架是否提供了一个选项来检索仅填充了作为父对象外键字段的子对象?
示例代码可能会更好地说明这一点。
假设您有以下 POCO 课程......
public abstract class Base
{
public Guid Id { get; set; }
}
public class User : Base
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Photo : Base
{
public string Description { get; set; }
public User UploadedBy { get; set; }
}
...并假设您已经DbContext
正确配置了一个,您如何查询Photos
包括该UploadedBy
对象在内的所有列表,但该UploadedBy
对象仅包含该Id
属性?
我知道我可以做到这一点...
return await _dbContext.Photos.Include(p => p.UploadedBy).ToListAsync();
...但这会返回整个User
对象。
我想做这样的事情......
return await _dbContext.Photos.Include(p => p.UploadedBy.Id).ToListAsync();
...表示我只想要该Id
属性。
如果我们可以链接这些包含,我们将能够选择我们想要返回的子对象上的每个属性。
或者更好的是,我希望能够在更全局的级别上配置一个设置,这样无论何时我要求Photos
,给我照片的所有成员,甚至是子对象,但只填充他们的外键,什么都没有更多的。
最后一个请求不太重要,因为我可以为每个 POCO 对象创建以下扩展方法......
public static IQueryable<Photo> IncludeForigenKeys(this PhotoAlbumDbContext context){
return context.Photos
.Include(photo => photo.UploadedBy.Id);
}