如何防止实体框架加载一个FILESTREAM字段成字节数组?(How do I prevent En

2019-07-29 02:02发布

我正在开发一个文件存储应用程序,我们已经将我们数据库中的FileStream类型。 该系统预计将支持大型文件。 本申请的一个部分允许多个文档的批量上传。 这些文件然后必须链接到系统内的其他实体。

一个页面旨在显示无关联的文件,以允许用户以一个链接的文件在同一时间的实体。 这样做的上传过程中的一些负载测试后,我们发现,在ASP.NET辅助进程的内存占用加载此未链接的文档页面时飙升至超过GB。

经过调查,似乎实体框架加载上百未链接文件的整个文档的行实体(包括的FileStream,转换为字节数组)。 在我的仓库类,转换成模型时,我不救这个字节数组,但那时已经太晚了。 EF已经花费的时间和存储器的字节数组分配到存储库类表示。

有没有一种方法,我可以告诉EF不加载此字节数组,除非我明确要求呢?

Answer 1:

驻军,你可以使用一个名为“实体分隔”在那里你两个相关实体映射到单个表功能。 所以在第一个实体,你会拥有一切,但FILESTREAM属性。 在第二个实体,你会拥有主键(同第一实体)和FILESTREAM属性。 创建一个:在你的模型实体之间的一个关系,然后两个实体映射到同一个表。 现在,随着FILESTREAM的实体相关的,您可以加载或根据需要延迟加载它。 唯一的缺点是,它不是你的主要实体的属性,所以你要浏览到相关实体,然后属性。

myEntity.MyRelatedEntity.TheFileStreamProperty

这里有一个旧的博客文章我写了如何在EDM设计器来完成。

您也可以实现与代码首先相同的映射。 这里有一个MSDN文章,我写了一个包含实体分割文章。 http://msdn.microsoft.com/en-us/data/hh272551

HTH朱莉



文章来源: How do I prevent Entity Framework from loading a FileStream column into a byte array?