10

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

一页旨在显示未链接的文档,以允许用户一次将一个文档链接到实体。在对上传过程进行了一些负载测试后,我们发现 ASP.NET 工作进程的内存占用在加载此未链接文档页面时飙升至超过 GB。

经过调查,Entity Framework 似乎正在为数​​百个未链接的文档加载整个文档行实体(包括 FileStream,转换为字节数组)。在我的存储库类中,我在转换为模型时不保存此字节数组,但到那时为时已晚。EF 花费了时间和内存将字节数组分配到 Repository 类表示中。

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

4

1 回答 1

13

Garrison,您可以使用称为“实体拆分”的功能,将两个相关实体映射到单个表。因此,在第一个实体中,您将拥有除 filestream 属性之外的所有属性。在第二个实体中,您将拥有主键(与第一个实体相同)和 filestream 属性。在模型中的实体之间创建一对一的关系,然后将两个实体映射到同一个表。现在具有文件流的实体是相关的,您可以根据需要加载或延迟加载它。唯一的缺点是它不是您的主要实体的属性,因此您必须导航到相关实体,然后是属性。

myEntity.MyRelatedEntity.TheFileStreamProperty

这是我写的一篇旧博客文章,展示了如何在 EDM 设计器中执行此操作。

您还可以使用 Code FIrst 实现相同的映射。这是我写的一篇 MSDN 文章,其中包含实体拆分文章。http://msdn.microsoft.com/en-us/data/hh272551

HTH 朱莉

于 2012-04-20T00:08:01.847 回答