是否可以在不加载所有属性的情况下急切加载某个属性?
现实生活情况:
我有两个实体,MediaLink和MediaItem。
我的媒体项目如下所示:
public partial class MediaItem
{
public MediaItem()
{
this.MediaLink = new HashSet<MediaLink>();
}
public int Id { get; set; }
public byte[] Content { get; set; }
public int Length { get; set; }
public string MimeType { get; set; }
public virtual ICollection<MediaLink> MediaLink { get; set; }
}
撰写查询时,我需要从MimeType
实体访问MediaItem
的{{1}}。
然而,当我使用导航属性访问MimeType时,查询还会返回MediaLink
,视频上的Content
可能会> 10MB并且会削弱性能。
我怀疑这是不可能的,但有没有办法可以通过EF返回MediaItem的MimeType属性而没有它的内容?
编辑:感谢您的评论,我应该补充说,我认为我可以通过将父MediaLink
和我想要的属性MediaItem
投影到新类型中,使用标准的linq查询来执行此操作但我需要在内部和AutoMapper映射。
目前,下面的映射要求我通过导航属性进入MediaItem
:
Mapper.CreateMap<MediaLink, MediaModel>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.MediaTypeId))
.ForMember(dest => dest.MimeType, opt => opt.MapFrom(src => src.MediaItem.MimeType));
我真正想做的是这样的事情:
Mapper.CreateMap<MediaLink, MediaModel>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.MediaTypeId))
.ForMember(dest => dest.MimeType, opt => opt.MapFrom(src => (from mi in src.MediaItem select mi.MimeType)));
希望投影能够返回整个MediaItem
实体。