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在需要时获取图像
我想知道是否有任何一种针对单个属性的延迟加载来提高加载速度。 我正在使用实体框架 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在需要时获取图像