Entity Framework "lazy loading" 单个属性

Entity Framework "lazy loading" for a single attribute

我想知道是否有任何一种针对单个属性的延迟加载来提高加载速度。 我正在使用实体框架 6.1.3 和以下模型:

public class Photo : HoHoRecord
{
    public string Description { get; set; }

    public int? GalleryId { get; set; }
    public virtual Gallery Gallery { get; set; }

    public byte[] Thumbnail { get; set; }
    public byte[] Content { get; set; }

    public virtual BitmapImage ThumbnailBitmapImage
    {
        get
        {
            return ImageByteConverter.GetBitmapFromContentByteArray(Thumbnail);
        }
    }

    public virtual BitmapImage ContentBitmapImage
    {
        get
        {
            return ImageByteConverter.GetBitmapFromContentByteArray(Content);
        }
    }
}

如果我访问另一个模型中的照片列表,我希望属性 Photo.Content 尚未下载。 它应该只在我访问 属性 Photo.ContentBitmapImage.

时下载

这样我就可以很好地提高整个列表的主要加载速度。

有什么方法可以在不创建额外模型 class 来存储字节数组的情况下实现这一点?

感谢和问候

马库斯

答案是否定的。

不过,您可以考虑几件事。

  • 投影 到中间 class 所以它不会一直拖拽图像。这将节省加载时间。但是你失去了将它用作附加实体等的能力。

  • 垂直分割 table 这样你的图像就不是它自己的实体的一部分,也不属于另一个 table/entity。或者创建专用图像 table,这两种方法都会为您提供真正的 可延迟加载 图像。

  • 这里要考虑的另一件事是,有时图像是最好的文件备份而不是数据库的一部分。关于这个主题的文章有利有弊,有大量讨论,这取决于您的需求和图像的大小

关于第一点,您可以轻松地extensions/methods在需要时获取图像