0

是否可以在不加载所有属性的情况下急切加载一个类型的属性?

现实生活情况:

我有两个实体,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; }
}

编写查询时,我需要从实体访问MimeTypeMediaItemMediaLink

然而,当我使用导航属性访问 MimeType 时,查询还会返回Content视频中的 which 可能 > 10MB 并削弱性能。

我怀疑这是不可能的,但是有什么方法可以返回 MediaItem 的 MimeType 属性而不通过 EF 的内容?

编辑:感谢您的评论,我可能应该补充一点,我认为我可以通过将父级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实体。

4

0 回答 0