加载没有其他类型属性的类型的属性?

时间:2013-11-07 10:26:05

标签: c# entity-framework-5 automapper eager-loading

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

现实生活情况:

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

0 个答案:

没有答案